TypeError: answer() missing 2 required positional arguments: 'Опрос' и 'Ответы' - django

Я хочу указать одно из полей таблицы с помощью сериализаторов, но получаю следующую ошибку

Ошибка :

TypeError: answer() missing 2 required positional arguments: 'Опрос' и 'Ответы'

код : serializers.py

from rest_framework import serializers
from .models import Answers, Poll ,Options
from authUser.models import User
​
​
​
​
class pollSerializer(serializers.ModelSerializer):
    class Meta:
        model = Poll
        fields = ["pollAnswer" ]
​
    pollAnswer = serializers.SerializerMethodField(method_name="answer")
​
    def answer(self , Options :Options , Poll:Poll , Answers :Answers ):
        poll = Poll.objects.get(pk=Poll.pk)
        polltype = poll["pollType"]
        if polltype == 0 :
            return Poll.pollAnswer
        if polltype == 1:
            options = Options.objects.filter(pollId=Poll.pk)
            big = 0
            oid = 0
            for i in options:
                if big < Answers.objects.filter(pollId=Poll.pk ,optionId=i.pk).count():
                    big = Answers.objects.filter(pollId=Poll.pk ,optionId=i.pk).count()
                    oid = i.pk
            return oid

Как вы можете видеть в документации, SerializerMethodField нужен метод, который принимает единственный аргумент: экземпляр модели для сериализации.

Метод сериализатора, на который ссылается аргумент method_name, должен принимать единственный аргумент (в дополнение к self), которым является сериализуемый объект. Он должен возвращать все, что вы хотите включить в сериализованное представление объекта.

Со:

class pollSerializer(serializers.ModelSerializer):
    class Meta:
        model = Poll
        fields = ["pollAnswer" ]
​
    pollAnswer = serializers.SerializerMethodField(method_name="answer")
​
    def answer(self, poll: Poll):
        ...

Этот метод должен возвращать значение, которое может быть сериализовано, я не уверен, что вы можете вернуть объект.

Если вам нужен ответ, вы должны вернуть строку.

Вернуться на верх