Ответ 1
Вы не можете создать массив внешних ключей. Это не ограничение Django, это ограничение "PostgreSQL".
Причина заключается в том, что внешний ключ не является типом, это ограничение для поля. Массив внешних ключей не вызывает никакого чувства.
Общий подход для достижения этого - использовать промежуточную таблицу, которая будет использоваться как связь между двумя другими:
Authors(id, name)
Books(id, title, pub_date)
BookAuthors(id, book_id, author_id)
В приведенном выше примере BookAuthors.book_id
является внешним ключом для Books.id
, а BookAuthors.author_id
является внешним ключом Authors.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()
.