django - Django更新一对多数组
问题描述
所以我得到这个错误直接分配到相关集合的反面是被禁止的。请改用 emails.set()。
这就是我的代码的样子
class Client(models.Model):
class Email(models.Model):
client = models.ForeignKey(Client, on_delete=models.CASCADE, related_name='emails', null=True, blank=True)
email = models.CharField(null=True, blank=True, max_length=50)
class EmailSerializer(serializers.ModelSerializer):
class Meta:
model = Emailfields = '__all__'
class ClientSerializer(serializers.ModelSerializer):
emails = EmailSerializer(required=False, allow_null=True, many=True)
def update(self, instance, validated_data):
# Update all fields of Client.
[setattr(instance, k, v) for k, v in validated_data.items()]
instance.save()
return instance
所以客户可以有很多电子邮件。当调用更新时,它说直接分配到相关集合的反面是被禁止的。请改用 emails.set()。
可以通过 let emailsData = valid_data.pop('emails', []) 从 valid_data 中删除电子邮件来避免此错误消息。
但是一旦完成,我不确定下一步要做什么来更新 emails 数组,如果它需要更新,或者如果它不再在 emailsData 数组中,则删除它。
json看起来像这样
{ id: 10, name: 'test', emails: [ { id: 1, emailType: 'Work', email: 'test@gmail.com', client_id: 10 } ] }
我有这个表格,如果客户有超过 1 封电子邮件,您可以在其中添加/删除电子邮件字段。因此,如果我添加另一个电子邮件行,而不设置电子邮件地址,则数组将被发送到包含它的 json。所以在 django 中,我检查电子邮件是否为空,不要插入。
这在创建时工作正常。但是,我的困境是在更新期间。如果电子邮件 id 相同,则更新它,否则如果为 0,则插入。如果用户决定删除他现有的电子邮件地址之一,我还需要检测要删除哪些电子邮件字段。
最简单的方法是删除所有并根据数组重新创建电子邮件条目,但我不希望这样,因为我不希望浪费 id 计数器。
想法?
解决方案
推荐阅读
- c - 为什么 GCC/Clang 会接受 const 限定对象作为具有静态存储持续时间的对象的初始化程序?
- csv - Apache Nifi:合并两个 csv 文件中的行
- reference - 在 Rust 中,为什么 std::iter::Iterator 的 min 函数返回一个引用?
- go - 替换 go.sum 中的字符串
- python - 来自 python 的 .xlx 格式的电子邮件消息在 Outlook 中具有 .dat 类型
- php - 如何在没有凭据的情况下进行 git push?
- regex - 从变量中提取 UUID/PARTUUID 的 BASH 脚本
- python - 如何提高我的 python 独立应用程序的性能?
- flutter - 有没有办法在 Flutter 中获得这种功能?Flutter 的贴纸视图?
- mongodb - 当 Spark 执行器中抛出异常时会发生什么?