сериализацию Django ModelSerializer в json? - PullRequest
0 голосов
/ 17 июня 2020

Я определил модель со свойством, которое я хотел бы включить в сериализацию:

class Flower(models.Model):
    health = CharField(...)

    @property
    def is_okay(self):
        return self.health == 'ok'

class OKSerializer(serializers.ModelSerializer):
    is_okay = serializers.Field()

    class Meta:
        model = Flower
        fields = '__all__'

Первоначально я использовал django.core.serializers для сериализации в json:

flowers = Flower.objects.all()
serialized_flowers = serializers.serialize("json", flowers)

Это было очень хорошо, но Django не сериализует настраиваемое свойство модели, поэтому мне пришлось создать свой собственный сериализатор, как вы видите выше. Однако, когда я пытаюсь сделать то же самое, я получаю сообщение об ошибке:

serialized_flowers = OKSerializer.serialize("json", flowers)

# ERROR" 'OKSerializer' has no attribute 'serialize'

Вероятно, это потому, что я использую ModelSerializer, который не имеет функции serialize().

Есть ли способ сериализации в json с помощью ModelSerializer, как я делал раньше? Есть ли у ModelSerializer функция сериализации в json?


EDIT Я также пробовал:

serialized_flowers = OKSerializer("json", flowers)

Но когда я пытаюсь print(serialized_flowers) или даже возвращая его как HttpResponse(serialized_flowers, content_type='application/json'), это приводит к следующей ошибке:

AssertionError: When a serializer is passed a `data` keyword argument you must call `.is_valid()` before attempting to access the serialized `.data` representation.

1 Ответ

0 голосов
/ 17 июня 2020
class OKSerializer(serializers.ModelSerializer):
 is_okay = serializers.SerializerMethodField('is_okay')
 class Meta:
  model = models.Flower
  fields = ['health', 'is_okay']

 def is_okay(self, flower):
  flower = flower.health
  return flower == 'ok'

измените свой сериализатор на этот и удалите @property из модального

...