Я определил сериалайзер, используя следующий код:Pass аргумент в методе вызывается через SerializerMethodField
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 - получать эквивалентные слова.
Кстати, это мой Viewset:
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
Что мне нужно, чтобы избежать двух одинаковых методов внутри сериализатором, когда я могу иметь только один (потому что они делают то же самое), если я прохожу аргумент для фильтрации поля отношения.
Как это сделать?
Заранее спасибо;)
Есть ли какое-либо отношение между 'RelationTerm.relation' и объектом' Term'? – mariodev
Я просто хочу знать, как передать аргумент методу get_assocVocabs, используя SerializerMethodField. Зачем тебе это знать? – Falcoa