gpt4 book ai didi

python - 带有 to_field 属性的 Django 外键字段的问题

转载 作者:搜寻专家 更新时间:2023-10-30 23:26:01 24 4
gpt4 key购买 nike

我有与组对象相关的用户对象模型(示例)。所以用户有类似的东西:

group_name = models.ForeignKey(Group, to_field="group_name", ...)

(当然 group_name 被定义为唯一的,因为它不是 Group 对象中的主键)

但是,当我尝试更改某些组对象的 group_name 值时(无论是通过管理界面还是在代码中更新所选对象),它会引发 Integrity 错误: FOREIGN KEY 约束失败

我知道外键字段有一个强制参数 on_delete 但我已经尝试了所有可能的预定义值(models.SET_DEFAULT, models .CASCADE 等)但没有任何变化。

在我看来,我需要做一些事情 on_update,但这不是可能的属性 ;-)

这里是一些代码示例

class Group(models.Model):  
members = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='teams', blank=True)
managers = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='managed_teams')
# name is short because MySQL does not allow unique char fields to be long
group_name = models.CharField(max_length=128, unique=True, validators=[RegexValidator(r'^[a-zA-Z0-9 ]+$')])


class User(models.Model):
name = models.CharField(max_length=200, default="username", blank=False)
group = models.ForeignKey(Group, null=True, blank=True, on_delete=models.SET_DEFAULT, to_field="name", default="Platform Validation and Testing")

我只是在代码中做了什么(前提是我已经将一些对象存储在具有用户 - 组关系的数据库中):

from myapp.models import Group
group = Group.objects.all()[0]
group.name = "Some new cool name"
group.save()

这里是 django.db.utils.IntegrityError: FOREIGN KEY constraint failed

正如我提到的,如果我在 Django 的管理界面中更改组名称字段,也会发生同样的情况。

最佳答案

当您更改组名时,指向原始组名的用户突然指向一个不存在的组。因此,如果不先检查是否有用户指向它,您就不能这样做。更改您的代码以首先检查所有指向您的组的用户,取消设置 fk,然后将其重置为新的 group_name 或保持未设置状态。

关于python - 带有 to_field 属性的 Django 外键字段的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57723396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com