python - Django 模型形式 - 多个模型

标签 python django validation django-models django-forms

我有几个模型,例如 ListingImage(一对多到列表)、Category(一对多到列表) )等

我怎样才能有一个处理所有这些模型的表单?另外,我如何强制执行非行特定验证,例如:要求至少传递三个图像/与列表关联?

最佳答案

使用模型表单时,我认为每个模型表单不可能引用多个模型。您可以从 forms.Form 创建自定义表单来处理验证。当我遇到这种情况时,我通常只使用两个/三个/四个模型表单,因为我喜欢一致性,并且它使模板级别的管理更加容易。

对于第二个问题,您需要重写您关心的模型表单的 clean() 方法。这是我最近写的一个示例:

def clean(self):
    cleaned_data = self.cleaned_data
    npv = cleaned_data.get("npv")
    irr = cleaned_data.get("irr")
    if npv == irr:
        raise forms.ValidationError('Must have either an NPV or IRR entry.')
    if (npv != None) and (irr != None):
        raise forms.ValidationError('Must have only one entry, either NPV or IRR.')
    return cleaned_data

还有关于覆盖 clean 的文档:

https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overiding-clean-on-a-model-formset

编辑:

“我通常只使用两个/三个/四个模型形式”我的意思是我为每个模型创建模型形式。我在 View 级别实例化它们,并将它们作为上下文的一部分发送到模板:

a = ModelFormA()
b = ModelFormB()
c = ModelFormC()

c = {'a':a,'b':b,'c':c}
return rendertoresponse('template.html',c)

如果您的某些模型具有相同的列名称,则只需在实例化时使用前缀参数即可。

有关前缀的文档可以在这里找到:

https://docs.djangoproject.com/en/dev/ref/forms/api/#prefixes-for-forms

然后您可以将 request.POST 传递到每个模型表单中,而不必单独解析字段。

关于python - Django 模型形式 - 多个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9740624/

相关文章:

python:执行subprocess.popen时出错

python - Django 模型字段,如何获取实际值?

java - MethodArgumentNotValidException 的 validator 仅处理相同类型的约束

angular - 如何以 Angular 验证开始日期和结束日期?

python - Groupby 用逗号分隔总和

python - 按特定顺序在 Pandas 中取消堆叠 Dataframe

python - 在 Django 上的测试执行中避免将 django.core.mail.outbox 作为电子邮件后端

javascript - MVC3 不显眼的验证 : how to remove/re-attach validation from a group of elements?

python - 查找第n个 '|'之后的子串

python - 如何在 Django 中获取具有反向关系的所有类的集合?