Как сделать форму несвязанной? - PullRequest
1 голос
/ 12 мая 2019

как сделать экземпляр, переданный в качестве параметра, сделать форму всегда действительной? Я хочу изменить кортеж в базе данных.

ue   = UE.objects.get(code_ue='INF401')
>>>ue_form = UEForms(instance=ue)
>>>ue_form.is_valid()
False

Вот views.py


def modifier_ue(request, code):

    if request.method == 'POST':

        ue_form = UEForms(request.POST);
        if ue_form.is_valid() and 'supprimer' in request.POST:
                return HttpResponse('supprimer');

        elif ue_form.is_valid() and 'continuer' in request.POST:
            return HttpResponse('continuer');


        elif ue_form.is_valid() and 'quitter' in request.POST:
            return HttpResponse('quitter');


        else:
            return HttpResponse(ue_form.errors.as_data())


    else:
        ue      = UE.objects.get(code_ue=code);
        ue_form = UEForms(instance=ue);
        return render(request, 'felyn/admin/modifier_ue.html', {'ue_form': ue_form, 'code': code});

1 Ответ

1 голос
/ 12 мая 2019

A Form связан, если data не None или files не None.Действительно, в исходном коде [GitHub] мы видим:

class BaseForm:

    # ...

    def __init__(self, <b>data=None</b>, <b>files=None</b>, auto_id='id_%s', prefix=None,
                 initial=None, error_class=ErrorList, label_suffix=None,
                 empty_permitted=False, field_order=None, use_required_attribute=None, renderer=None):
        <b>self.is_bound = data is not None or files is not None</b>
        # ...

Таким образом, нам нужно только передать что-то data здесь, например,пусто QueryDict [Джанго-док] .request.POST - это QueryDict, поэтому здесь мы в основном строим его для формы:

from django.http import <b>QueryDict</b>

ue_form = UEForms(<b>QueryDict()</b>, instance=ue)
...