gpt4 book ai didi

python - Django ORM : Models with 2 table referencing each other

转载 作者:行者123 更新时间:2023-11-29 11:16:19 25 4
gpt4 key购买 nike

我有两张 table 。用户和组。 1:很多关系。每个用户只能属于一个组。

这是 model.py。

class Group(models.Model):
group_name = models.CharField(max_length=150, blank=True, null=True)
group_description = models.TextField(blank=True, null=True)
group_creator = models.ForeignKey(User, models.DO_NOTHING)

class User(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
...
group = models.ForeignKey(Group, models.DO_NOTHING)

我遇到的问题是它们都互相引用,这在 MySQL 和 Oracle 中是可以接受的,但是在迁移时出现错误:

group_creator = models.ForeignKey(User, models.DO_NOTHING) NameError: name 'User' is not defined

现在,当我颠倒顺序时(因此,用户优先于组),我得到

group = models.ForeignKey(Group, models.DO_NOTHING, blank=True, null=True) NameError: name 'Group' is not defined

这真是令人沮丧。我有一些解决办法(使其成为许多:许多并让创建者保持在组类上),但在我开始销毁我的数据模型并移动数据移动所有数据之前,我想知道之前是否有人遇到过这个问题。你是怎么解决这个问题的?您真的需要更改数据模型吗?

最佳答案

正如 Pourfar 在评论中提到的,您可以通过将模型对象作为字符串引用来避免 NameError 。设置 lated_name 来访问此关系也是安全的。

class Group(models.Model):
...
group_creator = models.ForeignKey('User', related_name='creator_set')

然后,在你的约束下,

Each user can only belong to a single group.

在这种情况下,OneToOneField 更合适。

class User(models.Model):
...
group = models.OneToOneField(Group)

然后您可以按如下方式访问关系:

# USER is a User object
GROUP_BELONGED = USER.group # access to 1-1 relation
GROUP_CREATED = USER.creator_set.all() # reverse access to foreignkey relation
# now GROUP_BELONGED is a Group object
CREATOR = GROUP_BELONGED.group_creator # access to foreignkey relation

关于python - Django ORM : Models with 2 table referencing each other,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39682811/

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