Django возвращает новое свойство в json-ответ

У меня есть представление в Django, которое получает некоторые объекты, добавляет к ним новые атрибуты и возвращает их в виде ответа JSON.

Код выглядит следующим образом:

def stats(request):
    items = MyItem.objects.all().order_by('-id')

    for item in items:
        item.new_attribute = 10
        
    items_json = serializers.serialize('json', items)

    return HttpResponse(items_json, content_type='application/json')

Атрибут new_attribute не виден в JSON-ответе. Как я могу сделать его видимым в JSON-ответе? Он может быть доступен в шаблонах обычно с помощью {{ item.new_attribute }}.

Сериализатор по умолчанию просматривает поля, определенные в модели. Таким образом, есть два варианта решения этой проблемы:

  1. Добавьте атрибут к вашей модели MyItem
  2. Используйте пользовательский сериализатор для сериализации вашей модели с этим динамическим атрибутом
  3. .

Пример такого сериализатора:

serializers.py

class MyItemSerializer(serializers.ModelSerializer):
    new_attribute = serializers.SerializerMethodField()

    def get_new_attribute(self, obj):
        if hasattr(obj, 'new_attribute'):
            return obj.new_attribute
        return None

    class Meta:
        model = MyItem
        fields = '__all__'

И тогда в views.py будет:

items_json = serializers.MyItemSerializer(items, many=True).data

Поскольку вы ссылаетесь на serializers в своем коде, я предполагаю, что вы используете Django REST Framework и имеете класс с именем MyItemSerializer. Этот класс используется serializers.serialize() для определения того, как создать строку JSON из объектов вашей модели. Чтобы добавить новый атрибут в строку JSON, вам нужно добавить атрибут в этот класс.

Вернуться на верх