Это модели Django ORMДжанго сериализаторы: несколько таблиц OneToOne отношение к таблице
class A(models.Model):
...
class B(models.Model):
a = models.Foreignkey(A, on_delete=models.CASCADE)
class C(models.Model):
a = models.Foreignkey(A, on_delete=models.CASCADE)
А вот сериализаторы:
class ASerializer(serializers.ModelSerializer):
class Meta:
model = A
class BSerializer(serializers.ModelSerializer):
a = ASerializer(many=False)
class Meta:
model = B
class CSerializer(serializers.ModelSerializer):
a = ASerializer(many=False)
class Meta:
model = C
B и C работают, как ожидалось.
Задача 1:
Теперь, если я хочу, чтобы получить данные B и C от сериализатора А, делая b = BSerializer(many=False)
и c = CSerializer(many=False)
. Я получаю сообщение об ошибке NameError: name 'BSerializer' is not defined
, и если я поставил сериализатор B и C над ошибками A для Aserializer. Как это исправить?
Задача 2:
B и C имеют отношение один к одному с А. Таким образом, при сериализации, он не может иметь последующий B или C или как данные в таблицах B и C. Так, в ASerializer
b = BSerializer(many=False)
c = CSerializer(many=False)
может дать ошибки, если нет соотношения между А и С для конкретной строки. Как это исправить?
Добавление определения А после того, как B и C будет по-прежнему давать ошибку, потому что В и С помощью А. –
Хм, а вы могли бы попробовать что-то реальное Hacky, добавив еще один класс сериализатора в конце, что только подклассов : 'class HackyClassA (A): pass' –