我想在一个MySql数据库中添加一个generated column,我正在寻找一种能够从一个Django模型对象中读取该列的方法,但是没有尝试在插入/更新时为该列写一个值而MySql将抛出一个错误。
我知道您可以轻松地在管理站点的表单上设置一个只读字段,但有没有办法在模型/字段级别设置它?
另一种选择是覆盖默认管理器以返回始终使用该列中的值注释的QuerySet
:
from django.db.models.expressions import RawSQL
class MyManager(models.Manager):
def get_queryset(self):
return super().get_queryset().annotate(
my_field=RawSQL('''"{table}"."myfield"'''.format(
table=self.model._meta.db_table
), ())
)
然后在模型中设置objects = MyManager()
,每当你获取对象时,它们都会被你想要的字段注释:
instance = MyModel.objects.first()
instance.my_field # value from db annotation
您应该能够添加执行原始SQL查询的方法。