【问题标题】:How to make a form unbound bound?如何使表单不受约束?
【发布时间】:2019-05-12 07:14:27
【问题描述】:

如何使作为参数传递的实例使表单始终有效? 我想修改数据库中的一个元组。

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});

【问题讨论】:

  • 你设置data=QueryDict()
  • 我不明白您为什么要在此处设置表单。在 GET 请求中,您通常不会使表单有界,因为 POST 需要绑定表单。所以在 GET 情况下,它通常只是 UEForms(isntance=ue)...

标签: django forms validation


【解决方案1】:

如果data 不是None,或者files 不是None,则绑定Form。确实,在source code [GitHub] 中,我们看到:

class BaseForm:

    # ...

    def __init__(self, data=None, files=None, 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):
        self.is_bound = data is not None or files is not None
        # ...

所以我们只需要在这里传递一些东西给data,例如一个空的QueryDict [Django-doc]request.POST 是一个QueryDict,所以这里我们基本上为表单构造一个:

from django.http import QueryDict

ue_form = UEForms(QueryDict(), instance=ue)

【讨论】:

  • 它不仅不起作用,而且在我的代码的其他部分产生错误。我已经在文档中阅读了 QueryDict,它对我没有帮助。 ?
  • @fogangfokoa:也许指定错误可能会有所帮助。表单无效的事实可能是由于您的某些表单字段是必需的,因此显然该表单是有界,但无效。
  • Error is __init__() got an unexpected keyword argument 'instance'
  • @fogangfokoa:这可能是因为您的UEForms 不是ModelForm,或者您使用instance=... 调用的东西。请注意,Form 本身没有 instance,因为它不适用于模型。
  • @fogangfokoa:这甚至是标准文档中的一个标准案例:docs.djangoproject.com/en/2.2/topics/forms/modelforms/… 但是根据问题文本和这个讨论,我认为您首先需要让自己熟悉一些基本的 HTTP和 Django 概念。如果没有一些基本的了解,就很难实际构建一些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 2019-07-10
  • 2011-06-12
  • 1970-01-01
  • 2015-10-23
  • 2019-01-04
相关资源
最近更新 更多