gpt4 book ai didi

python - 将信息添加到 Django 中 ManyToMany 引用的模型实例中

转载 作者:太空宇宙 更新时间:2023-11-03 17:10:55 24 4
gpt4 key购买 nike

从一开始,我就觉得我错过了一些简单的东西 - 如果是这样,请指出我正确的方向。以下是对我的问题的最小解释:

有期刊、文章和注释的模型,最后一个代表已发表文章的编辑注释。文章可以根本不发表,可以发表在多种期刊上;显然期刊可以发表多篇文章。因此,首先我们有:

class Article(models.Model):
(author, date of creation, actual text, etc)

class Journal(models.Model):
(edition number, title, staff, etc)
articles = models.ManyToManyField(Article)

到目前为止,这是标准的。现在我需要能够向已发表的文章添加注释 - 比如说简短的评论或编辑的评论。注释需要连接到单个已发表的文章和特定期刊(同一篇文章在不同期刊中可以有不同的注释)。最后,注释可能仅与期刊相关,而不与任何文章相关 - 在这种情况下,它代表一个问题前言。到目前为止我有这个:

class Note(models.Model):
journal = models.ForeignKey(Journal)
article = models.ForeignKey(Article, null=True, blank=True)
text = models.TextField()
(other stuff, irrelevant)

通过此设置,我们可以确定每个注释都有期刊引用文献,并且可能有或没有文章引用文献。但是,现在可以为未在特定期刊上发表的文章添加注释,并将其连接到该“错误”期刊。这让我头晕目眩。

如何强制只能创建与期刊文章列表中的文章相关的新注释? (也在 django 的管理中 - 理想情况下下拉列表应仅显示所选期刊中的文章)

此外,如何确保每个期刊+文章组合只有一个注释(+可能是一个没有任何相关文章的注释)?

最佳答案

通过表单可以更轻松地完成此操作。

为了确保模型级别的选项唯一有效,需要额外的工作。

因此,我推荐这个优秀的第 3 方包: django-smart-selects

自述文件中的示例。

from smart_selects.db_fields import ChainedForeignKey 

class Location(models.Model):
continent = models.ForeignKey(Continent)
country = ChainedForeignKey(
Country,
chained_field="continent",
chained_model_field="continent",
show_all=False,
auto_choose=True
)
area = ChainedForeignKey(Area, chained_field="country", chained_model_field="country")
city = models.CharField(max_length=50)
street = models.CharField(max_length=100)

我在生产中使用它并取得了良好的效果。我确实建议将 JQUERY 设置设置为使用较新版本的 jQuery。

关于python - 将信息添加到 Django 中 ManyToMany 引用的模型实例中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34100251/

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