将虚拟字段添加到 django 查询

我想在 Django 中的查询集中添加一个额外的字段。

该字段在模型中不存在,但我想将其添加到查询集中。

基本上我想添加一个名为“upcoming”的额外字段,它应该返回“True”

我已经尝试将@property 方法添加到我的模型类中。这不起作用,因为显然 django 查询直接访问数据库。

模型.py

class upcomingActivity(models.Model):
    title      = models.CharField  (max_length=150)
    address    = models.CharField  (max_length=150)

视图.py

def get(self, request):
    query = upcomingActivity.objects.all()
    feature_collection = serialize('geojson', query ,
                                    geometry_field='location',
                                    fields= ( 'upcoming','title','address','pk' ) 
                                    )


炎炎设计
浏览 125回答 2
2回答

慕莱坞森

此答案适用于您不想向模型添加虚拟属性(模型保持原样)的情况。向查询集结果对象添加附加字段:from django.db.models import BooleanField, Value upcomingActivity.objects.annotate(upcoming=Value(True, output_field=BooleanField())).all()结果查询集中的每个对象都将具有upcoming布尔值的属性True。(性能应该不错,因为这对 DB 来说很容易,而且 Django/Python 不需要做太多额外的工作。)胡安卡洛斯评论后编辑:Django 序列化器用于序列化模型对象,因此默认情况下不会序列化任何非模型字段(因为基本上,这种情况下的序列化器用于加载/转储数据库数据)。请参阅https://docs.djangoproject.com/en/2.2/topics/serialization/Django 的序列化框架提供了一种将 Django 模型“翻译”成其他格式的机制。另请参阅:Django - 如何在序列化的 QuerySet 中包含带注释的结果?根据我自己的经验:在大多数情况下,我们json.dumps在视图中使用序列化,这就像一个魅力。您可以通过注释或处理数据(列表理解等),然后通过json.在您的情况下,另一种可能性可能是在从数据库中获取数据后自定义序列化程序或序列化程序的输入。

茅侃侃

您可以使用类函数返回upcoming值,如下所示:def upcoming(self):    is_upcoming = # some logic query or just basically set it to true.     return is_upcoming然后按照您的方式在您的序列化程序中正常调用它。fields= ( 'upcoming','title','address','pk' )
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python