Skip to content

form_views

django_spire.knowledge.collection.views.form_views

form_view

Source code in django_spire/knowledge/collection/views/form_views.py
@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'
    )