gpt4 book ai didi

Django 两个模型之间的关系

转载 作者:行者123 更新时间:2023-12-02 05:57:05 25 4
gpt4 key购买 nike

我对 Django 很陌生。

您能否提供一个模型样板,如何将两个模型相互关联。

--下面是剖面模型

from articles.models import Article
# Create your models here.
class Section(models.Model):
#associations
user = models.ForeignKey(settings.AUTH_USER_MODEL)
article = models.ForeignKey(Article) #Article

--下面是文章模型

from sections.models import Section
User = settings.AUTH_USER_MODEL

# Create your models here.
class Article(models.Model):
owner =models.ForeignKey(User, null=False)
sections = models.ManyToManyField( Section )

但是。我收到以下错误:ValueError:尚无法为“article”创建表单字段,因为其相关模型“articles.models”尚未加载

谢谢大家

B

最佳答案

打破周期性进口

您定义了循环导入:一个模块首先必须导入另一个模块,但另一个模块首先必须实现该模块,因此您定义了一个循环。

在 Django 中,本身不必必须使用类引用来创建 ForeignKey,可以使用引用的字符串正确的型号。在这种情况下,Django 框架稍后将解决这些问题。

因此我们可以打破循环,例如:

# sections/models.py

# <b>no</b> import from articles

# Create your models here.
class Section(models.Model):
#associations
user = models.ForeignKey(settings.AUTH_USER_MODEL)
# we use a string literal
article = models.ForeignKey(<b>'articles.Article'</b>, on_delete=models.CASCADE)

然后在articles/models.py中:

# articles/models.py

from sections.models import Section
User = settings.AUTH_USER_MODEL

# Create your models here.
class Article(models.Model):
owner = models.ForeignKey(User, null=False)
sections = models.ManyToManyField(Section)

所以这里我们不再在sections/models.py中导入articles/models.py,从而打破了循环导入。

请注意,您需要为 ForeignKey 指定 on_delete,例如 models.CASCADE

Django 的反向关系

但是,对于这个特定的应用程序,您似乎在 SectionArticle 之间建立了双重关系,这基本上是一种关系,您不应该这样做,Django会自动编写反向关系,您可能想要做的就是给它一个适当的名称,例如:

# sections/models.py

# <b>no</b> import from articles

# Create your models here.
class Section(models.Model):
#associations
user = models.ForeignKey(settings.AUTH_USER_MODEL)
# we use a string literal
article = models.ForeignKey(
'articles.Article',
on_delete=models.CASCADE,
<b>related_name='sections'</b>
)

对于articles/models.py:

# articles/models.py

User = settings.AUTH_USER_MODEL

# Create your models here.
class Article(models.Model):
owner = models.ForeignKey(User, null=False)
# <i>no</i> relation to section

这里我们可以通过some_article.sections.all()获取与some_article相关的所有Section

关于Django 两个模型之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53676580/

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