#python #class #django-rest-framework
Вопрос:
первый класс использует объект второго класса, и наоборот, как это исправить? Есть ли для этого какой-нибудь трюк?
Ошибка: Ошибка имени: имя «акторсериализатор» не определено
class FilmSerializer(serializers.ModelSerializer):
extrainfo = InfoSerializer(many=False)
recenzje = RecenzjeSerializer(many=True)
aktorzy = AktorSerializer(many=True)
class Meta:
model = Film
fields = ('id', 'nazwa', 'opis', 'rok', 'rating', 'extrainfo', 'recenzje', 'aktorzy')
class AktorSerializer(serializers.ModelSerializer):
filmy = FilmSerializer(many=True)
class Meta:
model = Aktor
fields = ('imie', 'filmy')
Комментарии:
1. Вам не понравится такая структура сериализатора, как эта, поскольку они взаимно рекурсивны. Вы получите бесконечно глубокий результат.
2. Это для учебных целей, я только начал использовать drf и пробовать кое-что новое, но спасибо за совет, что я должен сделать лучше здесь?
Ответ №1:
Как упоминалось в моем комментарии, наличие взаимно рекурсивных сериализаторов приведет к тому, что DRF попытается сгенерировать бесконечно глубокий рекурсивный вывод:
film: Film 1
film.aktorzy[0]: Actor 1
film.aktorzy[0].filmy[0]: Film 1
film.aktorzy[0].filmy[0].aktorzy[0]: Actor 1
film.aktorzy[0].filmy[0].aktorzy[0].filmy[0]: Film 1
...
Вам, вероятно, понадобится другой сериализатор для актеров в фильмах; это также устранит вашу первоначальную проблему.
class AktorWithoutFilmsSerializer(serializers.ModelSerializer):
class Meta:
model = Aktor
fields = ("imie",)
class FilmSerializer(serializers.ModelSerializer):
extrainfo = InfoSerializer(many=False)
recenzje = RecenzjeSerializer(many=True)
aktorzy = AktorWithoutFilmsSerializer(many=True)
class Meta:
model = Film
fields = (
"id",
"nazwa",
"opis",
"rok",
"rating",
"extrainfo",
"recenzje",
"aktorzy",
)
class AktorSerializer(serializers.ModelSerializer):
filmy = FilmSerializer(many=True)
class Meta:
model = Aktor
fields = ("imie", "filmy")