簡體   English   中英

將 Django ModelSerializer 序列化為 json?

[英]serializing a Django ModelSerializer into json?

我已經定義了一個 model 具有我想包含在序列化中的屬性:

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 不會序列化 model 上的自定義屬性,所以我必須像您在上面看到的那樣創建自己的序列化程序。 但是,當我嘗試做同樣的事情時,我收到一個錯誤:

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

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

這可能是因為我使用的是ModelSerializer ,它沒有serialize() function。

有沒有一種方法可以像以前一樣使用ModelSerializer序列化為json ModelSerializer是否有用於序列化到 json 的 function?


編輯我也試過:

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.
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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM