@AppAuthController('knowledge').permission_required('can_add')
def form_view(
request: WSGIRequest,
pk: int = 0,
parent_pk: int = None
) -> TemplateResponse | HttpResponseRedirect:
collection = get_object_or_null_obj(Collection, pk=pk)
dg.glue_model_object(request, unique_name='collection', model_object=collection)
dg.glue_query_set(
request,
unique_name='collections',
target=(
Collection.objects
.active()
.request_user_has_access(request)
.exclude(pk=collection.pk)
.exclude_children(collection_id=pk)
),
fields=['name']
)
dg.glue_query_set(
request,
unique_name='group_query_set',
target=AuthGroup.objects.all(),
fields=['name']
)
if request.method == 'POST':
form = CollectionForm(request.POST, instance=collection)
if form.is_valid():
collection, _ = collection.services.save_model_obj(**form.cleaned_data)
CollectionGroup.services.factory.replace_groups(
request=request,
group_pks=dict(request.POST).get('groups'),
collection=collection,
)
collection.services.tag.process_and_set_tags()
if collection.parent_id:
return_url = reverse(
'django_spire:knowledge:collection:page:top_level',
kwargs={'pk': collection.services.tool.get_root_collection_pk()}
)
else:
return_url = reverse('django_spire:knowledge:page:home')
return HttpResponseRedirect(
return_url
)
show_form_errors(request, form)
else:
form = CollectionForm(instance=collection)
return portal_views.form_view(
request,
form=form,
obj=collection,
context_data={
'collection': collection,
'collection_parent_pk': parent_pk,
'group_ids': list(
collection.groups.all().values_list('auth_group_id', flat=True)
) if collection.id else [],
},
template='django_spire/knowledge/collection/page/form_page.html'
)