Django-Rest框架在相同的视图中返回不同的序列化程序

2024-10-02 22:24:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两种型号: 在哪里

class Hunter(Model):
    name = CharField()

搜索

^{pr2}$

我的序列化程序是

class AnonymousTargetSerializer(ModelSerializer):
    class Meta:
        name = 'target'
        model = Target
        fields = ['id',]

还有

class TargetSerializer(ModelSerializer):
    class Meta:
        name = 'target'
        model = Target
        fields = ['id',]

在我的视图集中,我想:

hunter = Hunter.objects.get(user=self.request.user)
if hunter in Target.approved_hunters.all()
    return TagetSerializer
else:
    return AnonymousTargetSerializer

不过,我似乎只对视图集完成了这项工作,但无法在单个对象级别上进行过滤。在


Tags: nameidtargetfieldsmodelreturnmetaclass
1条回答
网友
1楼 · 发布于 2024-10-02 22:24:09

如果需要基于某些属性修改对象的表示形式,可以重写序列化程序的^{}方法:

class TargetSerializer(ModelSerializer):
    class Meta:
        name = 'target'
        model = Target
        fields = ['id',]

    def to_representation(self, obj):
        hunter = Hunter.objects.get(user=self.context['request'].user)
        if hunter not in Target.approved_hunters.all():
            return AnonymousTargetSerializer(obj).data
        return super().to_representation(obj)

在viewset中,您不需要任何自定义,只需使用TargetSerializer

^{pr2}$

相关问题 更多 >