我想向Django中的查询集添加一个额外的字段。
该字段不存在于模型中,但我希望将其添加到查询集中。
基本上,我想添加一个额外的字段,称为“即将到来”,它应该返回"True“。
我已经尝试将@property方法添加到我的模型类中。这不起作用,因为显然django查询直接访问DB。
models.py
class upcomingActivity(models.Model):
title = models.CharField (max_length=150)
address = models.CharField (max_length=150)Views.py
def get(self, request):
query = upcomingActivity.objects.all()
feature_collection = serialize('geojson', query ,
geometry_field='location',
fields= ( 'upcoming','title','address','pk' )
)发布于 2019-08-05 09:22:30
这个答案是因为您不想向模型中添加虚拟属性(模型保持原样)。
若要向queryset结果对象添加附加字段,请执行以下操作:
from django.db.models import BooleanField, Value
upcomingActivity.objects.annotate(upcoming=Value(True, output_field=BooleanField())).all()生成的查询集中的每个对象都将具有带有布尔值True的属性True。(性能应该很好,因为这对于DB来说很容易,Django/Python不需要做太多额外的工作。)
胡安·卡洛斯评论后编辑:
Django序列化程序用于序列化模型对象,因此默认情况下不会序列化任何非模型字段(因为在本例中,序列化程序主要用于加载/转储DB数据)。
请参阅https://docs.djangoproject.com/en/2.2/topics/serialization/
Django的序列化框架提供了一种将Django模型“转换”为其他格式的机制。
另见:Django - How can you include annotated results in a serialized QuerySet?
根据我自己的经验:
在大多数情况下,我们在视图中使用json.dumps进行序列化,这就像一种魅力。您可以非常灵活地准备数据,满足任何需要,无论是通过注释或处理数据(列表理解等)。然后再通过json把它扔掉。
在您的情况下,另一种可能是在从DB获取数据之后自定义序列化程序或序列化程序的输入。
发布于 2019-08-05 09:21:47
可以使用类函数返回upcoming值,如下所示:
def upcoming(self):
is_upcoming = # some logic query or just basically set it to true.
return is_upcoming然后按照您的方式在序列化程序中正常调用它。
fields= ( 'upcoming','title','address','pk' )https://stackoverflow.com/questions/57355467
复制相似问题