首页 > 解决方案 > 为什么 objects.create() 静默失败?

问题描述

当我通过创建对象[model].objects.create()并错误地设置了其中一个字段变量时,创建将失败。但是,即使有debug=True它也不会产生异常。

例如,以下内容无声地失败:

Email(models.Model):
   email = models.EmailField()

details = {'email': '1234'} # Fails because it is not a valid EmailField
Email.objects.create(**details)

为什么会这样,当我有一个包含很多字段的大型模型时,如何调试哪个字段失败?

标签: djangodjango-models

解决方案


它不会默默地失败。由于性能原因,在创建或创建模型对象时不会运行验证。.save()你可以提出.full_clean()[Django-doc]。这在文档的验证对象部分中指定:

请注意,当您调用模型的方法时,它full_clean()不会自动调用save()。当您想为自己手动创建的模型运行一步模型验证时,您需要手动调用它。

因此,通常使用ModelForm[Django-doc]通过调用清理函数来执行验证。因此,它们充当用户和模型之间的验证层。


推荐阅读