class B(models.model):
# some fields
class A(models.Model):
b = models.ForeignKey(B)
串行:
class B_Serializer(serializers.ModelSerializer):
class Meta:
model = B
fields = '__all__'
class A_Serializer(serializers.ModelSerializer):
b = BSerializer()
class Meta:
model = A
fields = '__all__'
任务:
def task():
data = {}
b = B.objects.get(id=1)
data['b'] = b
serializer = A_Serializer(data=data)
if serializer.is_valid():
serializer.save()
但是serailizer.is_valid()给出错误,它预期字典但得到该对象。 如果我这样做 -
data['b'] = b.__dict__
我收到一条错误,表明此ID已经存在。 B是一个modelSerializer,从一个函数调用serializer.is_valid(),该函数是芹菜中的一个任务
答案 0 :(得分:2)
不是将b
对象提供给序列化程序的数据,而是将其传递给save方法,如下所示:
def task():
data = {}
b = B.objects.get(id=1)
serializer = A_Serializer(data=data)
if serializer.is_valid():
serializer.save(b=b)
请注意,您需要制作序列化程序b
字段read_only
:
class A_Serializer(serializers.ModelSerializer):
b = BSerializer(read_only=True)
class Meta:
model = A
fields = '__all__'
您可以找到文档here的相关部分。