def create_citation(self, request, draftcitation_id):
        citation_type = ContentType.objects.get_for_model(Citation)
        context = dict(self.admin_site.each_context(request))
        context.update({'title': 'Create new citation'})
        draftcitation = DraftCitation.objects.get(pk=draftcitation_id)
        context.update({'draftcitation': draftcitation})

        AttributeInlineFormSet = formset_factory(AttributeForm)
        LinkedDataInlineFormSet = formset_factory(LinkedDataForm)
        ACRelationInlineFormSet = formset_factory(ACRelationForm, extra=0)

        if request.method == 'GET':
            form = CitationForm(initial={
                'title': draftcitation.title,
                'type_controlled': draftcitation.type_controlled,
                'record_history': u'Created from Zotero accession {0}, performed at {1} by {2}. Subsequently validated and curated by {3}.'.format(draftcitation.part_of.id, draftcitation.part_of.imported_on, draftcitation.part_of.imported_by, request.user.username),
                })
            attributeFormset = AttributeInlineFormSet(prefix='attribute', initial=[{
                'value': attribute.value,
                'type_controlled': AttributeType.objects.get(name=attribute.name),
                'subject_content_type': citation_type.id,
                } for attribute in draftcitation.attributes.all()])
            linkeddataFormset = LinkedDataInlineFormSet(prefix='linkeddata', initial=[{
                'universal_resource_name': linkeddata.value,
                'type_controlled': LinkedDataType.objects.get_or_create(name=linkeddata.name.upper())[0],
                'subject_content_type': citation_type.id,
                } for linkeddata in draftcitation.linkeddata.all()])
            acrelationFormset = ACRelationInlineFormSet(prefix='acrelation', initial=[{
                'type_controlled': acrelation.type_controlled,
                'authority': acrelation.authority.resolutions.first().to_instance.name,
                'authority_id': acrelation.authority.resolutions.first().to_instance.id,
            } for acrelation in draftcitation.authority_relations.all() if acrelation.authority.processed])


        elif request.method == 'POST':
            form = CitationForm(request.POST)
            attributeFormset = AttributeInlineFormSet(request.POST, prefix='attribute')
            linkeddataFormset = LinkedDataInlineFormSet(request.POST, prefix='linkeddata')
            acrelationFormset = ACRelationInlineFormSet(request.POST, prefix='acrelation')

            if all([form.is_valid(),
                    attributeFormset.is_valid(),
                    linkeddataFormset.is_valid(),
                    acrelationFormset.is_valid()]):
                instance = process_create_instance(draftcitation, form, attributeFormset, linkeddataFormset, acrelationFormset)

                # If successful, take the user to the Citation change view.
                return HttpResponseRedirect(reverse("admin:isisdata_citation_change", args=[instance.id]))

        context.update({
            'form': form,
            'attribute_formset': attributeFormset,
            'linkeddata_formset': linkeddataFormset,
            'acrelation_formset': acrelationFormset,
        })
        return TemplateResponse(request, "admin/citation_create.html", context)
A staff user can create a new :class:`isisdata.Authority` record using
dataset/ETHPy150Open upconsulting/IsisCB/isiscb/zotero/admin.py/DraftCitationAdmin.create_citation