【问题标题】:django model: check relation before saving the objectdjango模型:在保存对象之前检查关系
【发布时间】:2013-03-05 14:33:12
【问题描述】:

我的 django 模型包含两个类 annualReportannualReportAttachment

两个模型之间的关系是oneToMany。在管理表单中,我需要验证用户是否上传了至少一个文件,因此我在 annualReport 类中使用以下清理方法

def clean(self):
    attachments = annualReportAttachment.objects.filter(annualReport=self)
    if len(attachments) == 0:
        raise ValidationError("You should upload at least one file")

问题是附加文件尚未保存,因此attachments 变量为空,并且表单总是引发该错误。

如何检查用户是否至少上传了一个文件?

【问题讨论】:

  • 如果 len(附件) > 0:
  • AnnualReportAttachment 是否在您的管理类中表示为年度报告的内联模型?
  • @Brandon 是的,它是一个内联模型

标签: django django-models django-admin django-validation


【解决方案1】:

您需要确保您的内联模型中至少有一个表单被保存。为此,我建议利用 https://code.google.com/p/wadofstuff/wiki/WadOfStuffDjangoForms 中的 RequireOneFormSet 类

【讨论】:

  • 除了RequireOneFormSet,还有其他解决方法吗?
  • 您始终可以编写自己的代码,但您最终会编写与 RequireOneFormSet 类中相同的逻辑。我在许多需要至少一个内联模型的项目中使用过该类,并且效果很好。
  • RequireOneFormSet 类不能满足您的需求怎么办?
  • 不行。我只是相信有一个更简单的解决方案可以在保存之前检查相关对象是否存在。
  • 这就是开源的美妙之处。如果您能想出更简单的方法,我很乐意看到您提出的解决方案。
猜你喜欢
  • 1970-01-01
  • 2022-07-22
  • 2021-03-24
  • 2017-08-12
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多