それ自体に再帰的な関係を持つモデルがあります:
class Tweet(models.Model):
text = models.CharField(max_length=140)
original = models.ForeignKey("self", null=True, blank=True)
元のツイートをインラインでレンダリングするシリアライザー:
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
ます。の目的は、本格的な Tweed オブジェクトをフィールドoriginal_id
に提供するのではなく、新しいツイートの original_id を設定できるようにすることです。original
書き込み専用フィールドとして使用していると言えます。ただし、これは少し不格好に思えます。それを行うより良い方法はありますか?