通过Django核心序列化器添加可选的非模型字段

时间:2016-11-03 07:07:54

标签: python django serializer

我正在尝试序列化一个DJango查询集对象。

data = Data.objects.filter(name__icontains='John')
data_list = serializers.serialize('json', data, fields=('name', 'title'))
return HttpResponse(data_list, content_type="application/json")

data_list的STDOUT

[{"pk": 4, "model": "XXX", "fields": {"name": "John ad", "title": "Mr. "}}]

在输出列表中,我还想添加一个带有一些硬编码值的虚拟字段。

data_list的STDOUT

[{"pk": 4, "model": "XXX", "fields": {"name": "John ad", "title": "Mr. ", "Dummy": "Value"}}] 

有关我应该如何处理的任何帮助或我应该阅读的任何链接将不胜感激。

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是使用此虚拟值注释您的查询集。使用Value expression

from djanog.db.models import Value
data = Data.objects.filter(name__icontains='John').annotate(dummy=Value('Value'))
data_list = serializers.serialize('json', data, fields=('name', 'title', 'dummmy'))

另一种方法是将您的查询集包装在生成器中:

def qs_with_dummy(queryset):
    for obj in queryset:
        obj.dummy = 'Value'
        yield obj

data = qs_with_dummy(Data.objects.filter(name__icontains='John'))
data_list = serializers.serialize('json', data, fields=('name', 'title', 'dummy')