2014-09-06 5 views
0

Я сериализация QuerySet Джанго, который дает мне выход, какНастройка JSON сериализатор в Django

[{"pk": 3, "model": "appname.somemodel", "fields": {"name": "value", "name": "value" }}] 

Я заинтересован только в полях. Поэтому я пытаюсь переопределить сериализатор.

Я попытался

from django.core.serializers.json import Serializer 

class JSONSerializer(Serializer): 
    def end_serialization(self): 
     for i, obj in enumerate(self.objects): 
      self.objects[i] = obj.get('fields', {}) 
     return super(JSONSerializer, self).end_serialization() 

, но я получаю сообщение об ошибке атрибута:

'JSONSerializer' object has no attribute 'objects' 

Я проверил https://github.com/django/django/blob/master/django/core/serializers/python.py и Serializer действительно есть список под названием objects так, что является причиной этой проблемы?

Есть ли у Django способ пропускать pk и model из моего сериализованного выхода?

ответ

2

В json.Serializer метод end_serialization полностью переопределен, поэтому для понимания того, как он работает, вам нужно увидеть это https://github.com/django/django/blob/master/django/core/serializers/json.py.

Атрибуты pk и модели добавлены внутри метода get_dump_object, поэтому вам нужно переопределить его.

Например:

from django.core.serializers.json import Serializer 

class JSONSerializer(Serializer): 
    def get_dump_object(self, obj): 
     return self._current or {} 

С ID:

class JSONSerializer(Serializer): 
    def get_dump_object(self, obj): 
     dump_object = self._current or {} 
     dump_object.update({'pk': smart_text(obj._get_pk_val(), strings_only=True)}) 
     return dump_object 
+0

Спасибо! Это сработало. Но почему 'id' /' pk' опущен из списка? Я даже попробовал 'JSONSerializer(). Serialize (self.get_queryset(), fields = ('id', 'pk',))', но он не печатает идентификатор. – Jamgreen

+0

Вы должны вставить его самостоятельно. Я обновил свой пример. –

+0

Отлично. Спасибо! Но это не сериализует мои аннотированные поля. Кажется странным. Они находятся в наборе запросов. – Jamgreen

Смежные вопросы