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
) -> 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().user_has_access(request.user),
        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,
            )

            return HttpResponseRedirect(
                reverse('django_spire:knowledge:collection:page:list')
            )

        show_form_errors(request, form)
    else:
        form = CollectionForm(instance=collection)

    return portal_views.form_view(
        request,
        form=form,
        obj=collection,
        context_data={
            'collection': collection,
            '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'
    )