django - 为什么 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)
为什么会这样,当我有一个包含很多字段的大型模型时,如何调试哪个字段失败?
解决方案
它不会默默地失败。由于性能原因,在创建或创建模型对象时不会运行验证。.save()
你可以提出.full_clean()
[Django-doc]。这在文档的验证对象部分中指定:
请注意,当您调用模型的方法时,它
full_clean()
不会自动调用save()
。当您想为自己手动创建的模型运行一步模型验证时,您需要手动调用它。
因此,通常使用ModelForm
[Django-doc]通过调用清理函数来执行验证。因此,它们充当用户和模型之间的验证层。
推荐阅读
- sql - 星期差,如今天日期和日期前 7 天
- html - 我的文字装饰(下划线)未在移动设备上显示
- php - 我在 Laravel 中显示用户和帖子列表时遇到问题
- android-source - 如何为 hero2lte 设备构建 LineageOs?
- docker - 无法从外部访问在 EC2 上运行的 Dockerized 应用程序
- c# - 剃须刀组件中的 C# StateHasChanged() 不强制
- kubernetes - Kubernetes 在缩减规模时如何知道要杀死哪个 pod?
- java - solrj 设置查询字段
- excel - 如何修复“cmbSave_Click 按钮上的运行时错误 1004”,以及将数据从宏传输到数据表的帮助
- reporting-services - Report Builder 在计算组值总和时遇到问题