我试图让客户与电子邮件和电话建立一对多的关系。
class Client(models.Model):
class Email(models.Model):
client = models.ForeignKey(Client, on_delete=models.CASCADE, related_name='emails')
email = models.CharField(null=True, blank=True, max_length=50)
class Phone(models.Model):
client = models.ForeignKey(Client, on_delete=models.CASCADE, related_name='phones')
phone = models.CharField(null=True, blank=True, max_length=50)
这是我的序列化程序
class ClientSerializer(serializers.ModelSerializer):
emails = EmailSerializer(required=False, allow_null=True, many=True)
phones = PhoneSerializer(required=False, allow_null=True, many=True)
我无法确定为什么该帖子不会继续进行,因为它一直说需要客户端。
虽然我通过添加 read_only=True 让它工作,但即使我在 ClientSerializer 中定义了一个 def create(self,validated_data) 我也无法在 json 数据中获取电子邮件和电话数组。
这就是我在 views.py 中调用序列化程序的方式
serializer = ClientSerializer(data=request.data)
这是 json 数据的样子
{"id":0,"emails":[{"id":0,"emailType":"Home","email":"[email protected]"}],"phones":[],"name “:“我”}
所以我的目标是如果在 emails 数组中,如果有 email 属性,插入它,否则忽略。和手机一样。
这就是我在 views.py 中调用序列化程序的方式
@api_view('POST'])
def client(request):
serializer = ClientSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
所以在 ClientSerializer 中,我通过 Client.objects.create(validated_data); 创建了客户端对象。
然后从validated_data 中提取email 数组并执行for 循环。对于(在 emailData 中编辑):
Created an email = Email() object then
email.email = emailData.get('email')
email.client = client
但它给了我一个错误““client_id”列中的空值违反了非空约束”。当我执行打印(电子邮件)时,来自 email.client 的客户端对象为 null,这很奇怪,考虑到打印(客户端)有一个 id。
想法?
您正在序列化一个Client
需要 FK的模型 ( )。如果您希望它支持空值,则应该在模型中执行以下操作:
client = models.ForeignKey(Client, on_delete=models.CASCADE, related_name='emails', null=True, blank=True)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句