簡體   English   中英

使用Django REST框架進行序列化/反序列化的不同序列化器

[英]Different serializers for serializing/deserializing using Django REST framework

我有一個與自身具有遞歸關系的模型:

class Tweet(models.Model):
    text = models.CharField(max_length=140)
    original = models.ForeignKey("self", null=True, blank=True)

還有一個序列化器,可內聯呈現原始Tweet:

class TweetSerializer(serializers.ModelSerializer):
    class Meta:
        model = Tweet
        fields = ('id', 'text', 'original', 'original_id')

    original_id = serializers.IntegerField(source='original_id', required=False)

    def to_native(self, obj):
        ret = super(TweetSerializer, self).to_native(obj)
        del ret['original_id']
        return ret

TweetSerializer.base_fields['original'] = TweetSerializer(source='original', read_only=True)

如您所見,我還有一個original_id字段,該字段已在to_native刪除。 original_id的目的是允許我設置新tweet的original_id,而不必向original字段提供完整的Tweed對象。 您可以說我正在將其用作只寫字段。 不過,這似乎有些笨拙。 有更好的方法嗎?

好,兩點:

  1. 您是否嘗試過將PrimaryKeyRelatedField用作original_id 它似乎專門針對您的用例。 結合深度選項,它可以為您提供所需的一切。

  2. 您可以通過在視圖上重寫get_serializer_class()來切換序列化程序(例如,基於請求方法)。 不確定是否會得到您想要的確切行為。

暫無
暫無

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

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