Django Model字段只读取MySql生成的列

问题描述 投票:0回答:2

我想在一个MySql数据库中添加一个generated column,我正在寻找一种能够从一个Django模型对象中读取该列的方法,但是没有尝试在插入/更新时为该列写一个值而MySql将抛出一个错误。

我知道您可以轻松地在管理站点的表单上设置一个只读字段,但有没有办法在模型/字段级别设置它?

mysql django django-models django-orm
2个回答
1
投票

另一种选择是覆盖默认管理器以返回始终使用该列中的值注释的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

0
投票

您应该能够添加执行原始SQL查询的方法。

https://docs.djangoproject.com/en/2.2/topics/db/sql/

© www.soinside.com 2019 - 2024. All rights reserved.