[英]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對象。 您可以說我正在將其用作只寫字段。 不過,這似乎有些笨拙。 有更好的方法嗎?
好,兩點:
您是否嘗試過將PrimaryKeyRelatedField用作original_id
? 它似乎專門針對您的用例。 結合深度選項,它可以為您提供所需的一切。
您可以通過在視圖上重寫get_serializer_class()
來切換序列化程序(例如,基於請求方法)。 不確定是否會得到您想要的確切行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.