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 }}.
Сериализатор по умолчанию просматривает поля, определенные в модели. Таким образом, есть два варианта решения этой проблемы:
- Добавьте атрибут к вашей модели
MyItem
- Используйте пользовательский сериализатор для сериализации вашей модели с этим динамическим атрибутом .
Пример такого сериализатора:
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, вам нужно добавить атрибут в этот класс.