我有一个与自身有递归关系的模型:
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,而不必向该字段original_id
提供完整的 Tweed 对象。original
您可以说我将其用作只写字段。不过,这似乎有点笨拙。有更好的方法吗?