Django:将关键别名声明为objects.filter函数

时间:2016-11-19 17:30:36

标签: python django

我有一个标签问题应该很容易,但奇怪的是我无法找到出路。

我有这个过滤功能

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"}]

如何在没有编码的情况下直接将这些别名声明到我的过滤函数中?

1 个答案:

答案 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 ...