我使用以下代码定义了一个序列化程序:
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_assocVocabs
和get_equivVocabs
。
它们完全相同,过滤器中关系的值有什么变化,1是过滤相关的词汇,2是获得等效的词汇。
顺便说一句,这是我的观点:
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
我需要的是避免在序列化程序中有两个相同的方法,如果我传递一个参数来过滤关系字段,那么我只能有一个(因为它们会这样做)。
我该怎么做?
提前致谢;)