我正在尝试让客户与电子邮件和电话建立一对多的关系。
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, “邮件”:[{ “ID”:0, “EMAILTYPE”: “家”, “电子邮件”: “[email protected]”}], “手机”:[], “名”: “我”}
因此,我的目标是,如果在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中提取电子邮件数组,并进行for循环。(在emailData中编辑):
Created an email = Email() object then email.email = emailData.get('email') email.client = client
但是它给我一个错误“列“ client_id”中的空值违反了非空约束”。当我执行print(email)时,来自email.client的client对象为null,这很奇怪,考虑到print(client)具有id。
思考?
我正在尝试让客户与电子邮件和电话建立一对多的关系。 Client(models.Model)类:Email(models.Model)类:client = models.ForeignKey(Client,on_delete = models ....
您正在序列化需要FK的模型(Client
)。如果要支持空值,则应在模型中执行此操作:
client = models.ForeignKey(Client, on_delete=models.CASCADE, related_name='emails', null=True, blank=True)