Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django中发生错误时呈现管理表单_Python_Django_Forms_Foreign Keys_Render - Fatal编程技术网

Python Django中发生错误时呈现管理表单

Python Django中发生错误时呈现管理表单,python,django,forms,foreign-keys,render,Python,Django,Forms,Foreign Keys,Render,我有一个模型,其中包含一个带有外键的字段,该字段可以为NULL,并且是可选的。如果此字段没有值,我可以在管理页面中保存此表单,而不会出现任何问题。但是,当我的表单出现错误时,无法呈现我的表单,Django返回以下错误: Caught ValueError while rendering: need more than 0 values to unpack on line 19 9 {% for field in line %} 10

我有一个模型,其中包含一个带有外键的字段,该字段可以为NULL,并且是可选的。如果此字段没有值,我可以在管理页面中保存此表单,而不会出现任何问题。但是,当我的表单出现错误时,无法呈现我的表单,Django返回以下错误:

Caught ValueError while rendering: need more than 0 values to unpack on line 19
9               {% for field in line %}
10                  <div{% if not line.fields|length_is:'1' %} class="field-box{% if not field.is_readonly and field.errors %} errors{% endif %}"{% endif %}>
11                      {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %}
12                      {% if field.is_checkbox %}
13                          {{ field.field }}{{ field.label_tag }}
14                      {% else %}
15                          {{ field.label_tag }}
16                          {% if field.is_readonly %}
17                              <p>{{ field.contents }}</p>
18                          {% else %}
19                              {{ field.field }}
20                          {% endif %}
21                      {% endif %}
22                      {% if field.field.field.help_text %}
23                          <p class="help">{{ field.field.field.help_text|safe }}</p>
24                      {% endif %}
25                  </div>
26              {% endfor %}
27          </div>
28      {% endfor %}
29  </fieldset>
这是我的自定义表单的自定义clean():

  def clean(self):
    """Custom port range validator."""
    super(CircuitForm, self).clean()
    raise forms.ValidationError("Some stupid error just happened.")
    cleaned_data = self.cleaned_data
    return cleaned_data
请注意,如果我删除raise语句,我的表单可以成功提交,但是,当我提出错误时,它会给出上述错误

你知道当我的表单有错误的时候,我该如何呈现它吗


请注意,只有在创建新条目而未设置可选字段或编辑未设置可选字段的条目时,才会发生此错误。如果我正在编辑设置了这些可选字段的现有条目,如果我取消设置这些可选字段,它不会给出任何错误

@GeoffroyCALA是对的,您需要条件来引发异常。如果不检查条件,则仍将引发异常。此外,您没有指定为其设置自定义异常的表单字段。看

试试这样:

def clean(self):
    """Custom port range validator."""
    cleaned_data = self.cleaned_data

    if cleaned_data['vpc'] not in Room.objects.values_list('id', flat=True): # FOR EXAMPLE
        raise forms.ValidationError("Some stupid error just happened.")        

    super(CircuitForm, self).clean()

    return cleaned_data

我真的把它修好了。我使用字典在init方法中手动初始化这些字段,而我必须使用如下元组列表:[(“”,“--Select-->”)。很抱歉给您带来不便。如果您能将其添加到答案中,然后将其标记为正确,这将有助于其他有类似问题的人。我发现您的clean方法存在问题。在引发ValidationError之前,您一定忘记了if子句,无论您的数据是什么,这个clean方法都会引发ValidationError。也许只是打字错误?
def clean(self):
    """Custom port range validator."""
    cleaned_data = self.cleaned_data

    if cleaned_data['vpc'] not in Room.objects.values_list('id', flat=True): # FOR EXAMPLE
        raise forms.ValidationError("Some stupid error just happened.")        

    super(CircuitForm, self).clean()

    return cleaned_data