Django的Rest框架的ModelSerializer重写如何工作?

时间:2019-02-01 17:58:13

标签: django django-rest-framework

我正在跟踪情况,我无法弄清楚以下使用rest_framework的代码如何工作。我查看了文档,但在那里找不到太多帮助。 (此代码来自django教程,但此处未提供任何信息)

这是模型:

class Tweet(models.Model):
    parent = models.ForeignKey("self",blank=True,null=True,on_delete=models.CASCADE)
    user = models.ForeignKey(Profile,on_delete=models.CASCADE)
    content = models.CharField(max_length=140,validators=[validate_content])
    timestamp = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now_add=True)

和序列化器:

class TweetModelSerializer(serializers.ModelSerializer):
    user = UserDisplaySerializer(read_only=True) #write_only
    date_display = serializers.SerializerMethodField()
    timesince = serializers.SerializerMethodField()
    parent = ParentTweetModelSerializer(read_only = True)

    class Meta:
        model = Tweet
        fields = [
            'id',
            'user',
            'content',
            'timestamp',
            'date_display',
            'timesince',
            'parent'
        ] 
// other lines of code
class ParentTweetModelSerializer(serializers.ModelSerializer):
    user = UserDisplaySerializer(read_only=True) #write_only
    date_display = serializers.SerializerMethodField()
    timesince = serializers.SerializerMethodField()

因此parent是我原始Tweet模型中的一个字段,但是当我使用序列化程序覆盖或替换字段“ parent”时,ParentTweetModelSerializer如何确定与哪个Tweet相关的TweetModelSerializer的tweet,而无需我们传递任何数据(因为我们没有在ParentTweetModelSerializer()中传递任何内容?

在rest_framework的文档中找不到与之相关的任何内容。

0 个答案:

没有答案