我想向 Django 中的查询集添加一个额外的字段。
模型中不存在该字段,但我想将其添加到查询集中。
基本上我想添加一个名为“upcoming”的额外字段,它应该返回“True”
我已经尝试向我的模型类添加 @property 方法。这不起作用,因为显然 django 查询直接访问数据库。
模型.py
class upcomingActivity(models.Model):
title = models.CharField (max_length=150)
address = models.CharField (max_length=150)
View .py
def get(self, request):
query = upcomingActivity.objects.all()
feature_collection = serialize('geojson', query ,
geometry_field='location',
fields= ( 'upcoming','title','address','pk' )
)
最佳答案
此答案适用于您不想向模型添加虚拟属性的情况(模型保持原样)。
向查询集结果对象添加附加字段:
from django.db.models import BooleanField, Value
upcomingActivity.objects.annotate(upcoming=Value(True, output_field=BooleanField())).all()
生成的查询集中的每个对象都将具有 bool 值 True
的属性 upcoming
。
(性能应该很好,因为这对于数据库来说是很容易的工作,并且 Django/Python 不需要做太多额外的工作。)
胡安·卡洛斯评论后编辑:
Django 序列化程序用于序列化模型对象,因此默认情况下不会序列化任何非模型字段(因为基本上,本例中的序列化程序用于加载/转储数据库数据)。
参见https://docs.djangoproject.com/en/2.2/topics/serialization/
Django’s serialization framework provides a mechanism for “translating” Django models into other formats.
另请参阅:Django - How can you include annotated results in a serialized QuerySet?
根据我自己的经验:
在大多数情况下,我们使用 json.dumps
在 View 中进行序列化,这就像一个魅力。您可以非常灵活地准备数据,以满足任何需要,通过注释或在通过 json
转储数据之前处理数据(列表理解等)。
您的情况的另一种可能性可能是在从数据库获取数据后自定义序列化器或序列化器的输入。
关于python - 向 django 查询添加虚拟字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57355467/