这是Django ORM模型
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 = BSerializer(many=False)
和c = CSerializer(many=False)
从序列化工具A获取B和C的数据。我将收到NameError: name 'BSerializer' is not defined
的错误,如果我将B和C序列化器放在Aserializer的A错误之上。我该如何解决这个问题?
问题2:
B和C与A具有一对一的关系。因此,在序列化A时,它可能在B和C表中没有后续的B或C或两个数据。 所以,在ASerializer中
b = BSerializer(many=False)
c = CSerializer(many=False)
如果特定行的A和C之间没有关系,可能会出错。我该如何解决这个问题?
答案 0 :(得分:0)
首先,我建议如果您打算拥有one-to-one relationship,那么您实际上是这样定义的:
class A(models.Model):
...
class B(models.Model):
a = models.OneToOneField(A, on_delete=models.CASCADE)
class C(models.Model):
a = models.OneToOneField(A, on_delete=models.CASCADE)
问题一
我还没有测试过这个,但它可能是定义订单问题吗?如果您在class A
和class B
之后放置class C
的定义会怎样?
问题二
尝试将required=False, allow_null=True
添加为suggested here。
b = BSerializer(many=False, required=False, allow_null=True)
c = CSerializer(many=False, required=False, allow_null=True)