我有一个标签问题应该很容易,但奇怪的是我无法找到出路。
我有这个过滤功能
def search(cls, query):
return cls.objects.filter(label__icontains=query)
我的模型只是由一个键和一个标签字段组成。我得到的东西看起来像这样
[{"id": 20, "label": "Title 1"}, {"id": 22, "label": "Title 2"}]
但我想在我的输出中使用“name”而不是“label”和“key”而不是“id”别名,如下所示:
[{"key": 20, "name": "Title 1"}, {"key": 22, "name": "Title 2"}]
如何在没有编码的情况下直接将这些别名声明到我的过滤函数中?
答案 0 :(得分:1)
您可以使用django的F
表达式。
def search(cls, query):
qs = cls.objects.filter(label__icontains=query)
return qs.annotate(key=F('id'), name=F('label')).values('key', 'name')
这样django基本上会生成一个查询SELECT id as key, label as name FROM ...
。