【发布时间】:2019-09-08 22:38:54
【问题描述】:
我想将generated column 添加到 MySql 数据库中,并且正在寻找一种能够从 Django 模型对象中读取该列的方法,但没有曾经尝试编写一个插入/更新时该列的值,MySql 将对此抛出错误。
我知道您可以在管理站点的表单上轻松地将字段设置为只读,但有没有办法在模型/字段级别进行设置?
【问题讨论】:
-
你可以给你的字段一个“私人名称”,比如
_my_field,并为它创建一个getter(属性)my_field,而不需要setter。如果有人尝试设置它,您还可以覆盖__setattr__()以引发异常。但是您仍然需要在迁移文件中使用原始 sql 来创建该列以便生成它。 -
这会阻止 ORM 在调用 save() 时尝试更新字段?好像不是这样,但我想我可以试试。
-
不,不会的。 “......并且 MySql 会抛出一个错误”你的意思是说“否则 MySql 会抛出一个错误”还是“我想要抛出一个错误”?您还可以覆盖模型的
save()方法,调用其super方法并始终设置update_fields以排除此特定字段。 -
如果您尝试插入/更新生成的列值,MySql 将抛出错误。我会检查 update_fields。
标签: mysql django django-models django-orm