python - Django 出错时渲染管理表单

标签 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                  <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>

这是我的模型的样子:

class Circuit(CommonFields):
  """Circuit class model."""
  vid = models.AutoField(primary_key=True)
  vname = models.CharField(
      'Vendor Name',
      max_length=100,
      null=True,
      blank=True)
  vspc = models.ForeignKey(
      Room,
      db_column='avspc',
      verbose_name='Space',
      null=True,
      blank=True)

这是我自定义表单的自定义 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 是对的,您需要条件来引发异常。如果您不检查条件,无论如何都会引发异常。此外,您没有指定为其设置自定义异常的表单域。查看docs example .

尝试这样的事情:

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

关于python - Django 出错时渲染管理表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6378271/

相关文章:

django - 在 Django 中包含 css

python mechanize提交表单让我回到root

python - 来自一个点的向量的累积和

Python ValueError : float: Argument: . 不是第 12 行的数字

python - 使用 dh_virtualenv 对 python 包进行 debianising 时,console_scripts 不在路径上

javascript - 禁用提交,但如果按下后退按钮,请确保其重新启用

html - 如何将元素对齐到中心?

python - 导入 h5py 时出错

python - Django - 如何创建包含其自己类型的集合的模型?

python - 上面的异常(没有这个表: oauth2_provider_accesstoken) was the direct cause of the following exception: