任何人都可以解释这一点吗?表单验证方法会更新相关模型真的很不直观。我明白它没有提交到数据库,但为什么即使修改内存中的模型?为什么不用form.save()呢?为什么form.is_valid()更新Django ModelForms的相关模型?
3
A
回答
3
我认为原因是这样的:
第一次调用is_valid()或 访问 的ModelForm的错误属性始终触发形式 验证,但作为Django的1.2,它 也会触发模型验证。 这具有清洁 您传递给ModelForm 构造函数的模型的副作用。例如,在窗体上调用 is_valid()将您的模型上的任何日期字段转换为 实际日期对象。
从here。从逻辑上讲,这确实是有道理的。假设我有一个像这样的模式:
class SomeModel(models.Model):
Somefield = models.CharField(unique=True)
然后尽可能的的ModelForm而言,验证领域TextInputField
将适用于任何价值。然而,从模型的角度来看,没有任何价值会做 - 这个价值必须是唯一的。
验证机制描述为here。基本上,在模型上调用full_clean
会导致该模型根据OO范式检查自己的字段。因此,出于这个原因,模型的内存映像可以更新并验证它将检查它是否可以真正写入数据库。
因此,它是有道理的,因为你的后卫:
if form.is_valid():
真的应该确保:
form.save()
其实可以发生。
相关问题
- 1. Django - 为什么model属性在`not form.is_valid()`时更新?
- 2. 模型相关的FileField Django的REST框架更新
- 3. Django中的Form.is_valid
- 4. Django的相关模型和更新视图领域
- 5. Django的更新视图与相关模型
- 6. ASP.Net MVC3更新相关的模型
- 7. 更新相关模型中的auto_now DateTimeField
- 8. 更新删除相关模型属性
- 9. 相关型号模型现场更新更新
- 10. Django的,从模型更新
- 11. Django的查询与相关模型
- 12. 相关领域的Django模型验证
- 13. 定义相关的Django模型域
- 14. 为什么laravel不会触发相关的模型事件?
- 15. 更新相关的“最新”的模式
- 16. Django:为相关模型使用用户模型或配置文件模型
- 17. Django按照最新相关模型创建的管理命令
- 18. Django:从相关的一组模型中获取相关集
- 19. 使用Django窗体更新Django模型
- 20. Laravel雄辩:存储与相关的新模型的新模型
- 21. 为什么创建新产品模型时会调用“更新”?
- 22. Django相关模型无法解析
- 23. 通过相关模型筛选django
- 24. Django获取与多个模型相关
- 25. Django模型 - 选择相关计数
- 26. Django模型相关字段集
- 27. 显示多个相关Django模型
- 28. 在Django中访问相关模型?
- 29. Django Meta unique_together与相关模型ManyToOne?
- 30. Django模型 - 相关对象验证