2016-11-03 4 views
0

Я пытаюсь сериализовать объект запроса Django.Добавление необязательного немодельного поля с помощью сериализатора ядра 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") 

STDOUT из data_list

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

В списке вывода я также хочу добавить фиктивное поле с некоторыми закодированными значениями.

STDOUT из data_list

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

Любая помощь о том, как я должен продолжать или любые ссылки, я должен прочитать была бы оценена.

ответ

1

Один из способов сделать это - просто аннотировать ваш запрос с этим фиктивным значением. Использование 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')) 

Другой способ обернуть QuerySet генератора:

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') 
+0

В аннотирования, если я поставлю любую строку, я получаю ошибку атрибут поиска. – Pattu

+0

Ах. Но я не думаю, что Value доступен в Django 1.6. – Pattu

+0

@Pattu Читать обновление. Оберните свой запрос в генератор и добавьте это значение на лету –