对于Django表单,是否有办法强制执行“其中一个输入,但并非所有输入都是必需的”?

2024-09-24 22:17:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个函数来更新Django中三个可能的字段之一——布尔值、字符串或整数

我试图这样做:

class AccountsForm(forms.Form): 
    update_key = forms.CharField(required=True)
    update_value  = forms.ComboField(fields=[forms.CharField(),
         forms.IntegerField(), forms.BooleanField()], 
         required=True)

但这不是我想要的功能,因为它需要CharField+IntegerField+BooleanField的组合。我需要在表单中正好出现三个字段中的一个。django表单可以这样做吗


Tags: django函数字符串formtrue表单requiredupdate
1条回答
网友
1楼 · 发布于 2024-09-24 22:17:45

有。Django docs实际上向您展示了如何做到这一点:

  • 使用三个单独的字段
  • 使所有这些都不是必需的(required=False
  • 在表单中添加一个clean()方法,在其中同时验证这三个字段。如果您第一次调用super().clean(),您可以确保首先分别验证了字段,例如,IntegerField的输入实际上是一个整数,因此您不需要再这样做了
  • 使用cleaned_data字典查看每个字段的值。您还可以检查self.errors[<field>]以查看是否有任何字段填写错误
  • 如果您对输入不满意,请提出ValidationError
  • 在模板中,不要忘记在表单顶部显示{{ form.non_field_errors }},以便用户知道您引发的错误。或者只需在其中一个字段上添加错误,将其显示在字段附近

相关问题 更多 >