gpt4 book ai didi

django-rest-framework - 在通过 SerializerMethodField 调用的方法中传递参数

转载 作者:行者123 更新时间:2023-12-02 03:19:01 24 4
gpt4 key购买 nike

我使用以下代码定义了一个序列化器:

class TermSerializer(serializers.ModelSerializer):

associatedVocabs = serializers.SerializerMethodField('get_assocVocabs')
equivalentVocabs = serializers.SerializerMethodField('get_equivVocabs')

def get_assocVocabs(self,obj):
vocabs = Vocab.objects.none()
related = RelationTerm.objects.filter(from_term = obj.id, relation=1)
return related

def get_equivVocabs(self,obj):
vocabs = Vocab.objects.none()
related = RelationTerm.objects.filter(from_term = obj.id, relation=2)
return related

class Meta:
model = Term
fields = ('id', 'associatedVocabs', 'equivalentVocabs')

正如您在这个序列化程序中看到的,我定义了两个方法:get_assocVocabsget_equivVocabs。完全一样,变化的是filter中relation的取值,1是过滤关联词,2是得到等价词。

顺便说一句,这是我的 View 集:

class TermViewSet(viewsets.ModelViewSet):
renderer_classes = (TermJSONRenderer, BrowsableAPIRenderer, )
serializer_class = TermSerializer
allowed_methods = ('GET','OPTIONS','HEAD')

def get_queryset(self):
queryset = Term.objects.all()
word = self.request.query_params.get('word', None)
if word is not None:
queryset = queryset.filter(word__iexact=word)
return queryset

我需要的是避免在序列化器中有两个相同的方法,如果我传递一个参数来过滤关系字段,我只能有一个(因为它们做同样的事情)。

我该怎么做?

提前致谢;)

最佳答案

我会将您的对象添加到 serializer's context并从您的方法中获取它。

关于django-rest-framework - 在通过 SerializerMethodField 调用的方法中传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34743631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com