gpt4 book ai didi

django - 尝试在 Django 中创建一个带有外键列表的 PostgreSQL 字段

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

这是我正在尝试做的事情:在 Django 中创建一个模型,它是一个 PostgreSQL 数组(数据库特定类型),其中包含另一个模型的外键。

class Books(models.Model):
authors = ArrayField(
models.ForeignKey('my_app.Authors', default=None, null=True, blank=True),
blank=True,
default=list()
)

当我尝试 makemigrations 时,Django 给我这个错误:

SystemCheckError: System check identified some issues:
ERRORS:
my_app.Books.authors: (postgres.E002) Base field for array cannot be a related field.

关于如何打败它的任何想法?

最佳答案

您不能创建外键数组。这不是 Django 的限制,而是 PostgreSQL 的“限制”。

原因是外键不是类型,it is a constraint on a field .外键数组没有任何意义。

实现此目的的一般方法是使用一个中间表,该中间表将用作两个其他表之间的链接:

Authors(id, name)
Books(id, title, pub_date)
BookAuthors(id, book_id, author_id)

在上面的例子中,BookAuthors.book_idBooks.id 的外键,BookAuthors.author_id作者.id。因此,表 BookAuthors 用于将作者与书籍相匹配,反之亦然。

Django 用 ManyToManyField fields 抽象出这个中间表:

class Authors(models.Model):
name = models.CharField(...)

class Books(models.Model):
title = models.CharField(...)
pub_date = models.DateField(...)
authors = models.ManyToManyField('my_app.Authors',
related_name='authored_books')

在幕后,Django 将创建中间表。

然后,您可以使用 book.authors.all() 获取一本书的所有作者,或者使用 author.authored_books.all() 获取某个作者创作的所有书籍>.

关于django - 尝试在 Django 中创建一个带有外键列表的 PostgreSQL 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35957837/

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