@permission_required('django_spire_knowledge.add_collection')
def form_view(
request: WSGIRequest, collection_pk: int, pk: int = 0
) -> TemplateResponse | HttpResponseRedirect:
entry = get_object_or_null_obj(Entry, pk=pk)
collection = Collection.objects.get(pk=collection_pk)
Glue.model(request, 'entry', entry, fields=['name'])
if request.method == 'POST':
form = EntryForm(request.POST, instance=entry)
if form.is_valid():
form.cleaned_data['collection'] = collection
entry, _ = entry.services.save_model_obj(author=request.user, **form.cleaned_data)
return HttpResponseRedirect(
reverse('django_spire:knowledge:entry:version:page:editor', kwargs={'pk': entry.pk})
)
show_form_errors(request, form)
else:
form = EntryForm(instance=entry)
nav = EntryNavigation()
nav.page_title = 'Entry'
nav.page_description = 'Edit' if pk else 'Create'
add_collection_chain_breadcrumbs(nav.breadcrumbs, collection)
if entry.name:
nav.breadcrumbs.add(str(entry))
nav.breadcrumbs.add_model_instance_form_action(entry)
return TemplateResponse(
request,
context=nav.as_context() | {
'form': form,
'entry': entry,
'action_url': (
reverse(
'django_spire:knowledge:entry:form:create',
kwargs={'collection_pk': collection_pk},
)
if not entry.pk
else reverse(
'django_spire:knowledge:entry:form:update',
kwargs={'collection_pk': collection_pk, 'pk': entry.pk},
)
),
},
template='django_spire/knowledge/entry/page/form_page.html',
)