Скажем, у меня есть модели:Джанго доступ к другой модели с помощью внешнего ключа
Class Author(models.Model):
id = models.PositiveIntegerField()
dob = models.DateField()
Class Note(models.Model):
note = models.TextField()
author = models.ForeignKey(Author)
Class Book(models.Model):
name = models.CharField()
pubdate = models.DateField()
author = models.ForeignKey(Author)
И в admin.py:
Class BookInline(admin.StackedInline):
model = Book
Class NoteInline(admin.StackedInline):
model = Note
Class AuthorAdmin(admin.ModelAdmin):
model = Author
inlines = [BookInline, NoteInline]
Class BookAdmin(admin.ModelAdmin):
model = Book
Пользователи должны вводить данные со страницы AuthorAdmin, и есть встроенный для ввода данных Book.
В идеале я хотел бы, чтобы текстовое поле примечания было частью модели книги, но в большинстве случаев это вряд ли будет использоваться.
Так что я думал ради эффективности базы данных, я бы переместил ее в отдельную таблицу. При отсутствии правильной работы вложенных встроенных строк (я пробовал существующие пакеты и сталкивался с известными ошибками), работа над настройкой работает (т. Е. Имеет примечание, прикрепленное к Автору, а не книгу).
Однако, когда я использую BookAdmin, я не вижу никаких заметок (поскольку это внешний ключ для Автора, а не книги). Есть ли способ редактирования любых заметок, связанных с автором в данной книге?
Update
Основываясь на комментариях ниже, я добавил следующий внешний ключ Примечание:
Class Note(models.Model): note = models.TextField() author = models.ForeignKey(Author) book = models.ForeignKey(Book)
, а затем
Class BookAdmin(admin.ModelAdmin): model = Book inlines = [NoteInline]
Это позволяет мне получить доступ к см. поле примечаний из BookAdmin.
Однако, когда я ввожу примечание от AuthorAdmin, вместо того, чтобы показывать мне эту заметку в BookAdmin, отображается новое поле пустой заметки.
Что я делаю неправильно?
Книги не всегда будут иметь заметки, на самом деле я предполагаю, что в лучшем случае будет только 10% от всех книг. Вот почему я хотел переместить их в отдельную таблицу, а не иметь много пустых текстовых полей ... Заметки действительно связаны с книгами, но имеет смысл связать их с Автором (например, обзор книги). Есть ли другой способ связать их с книгами и по-прежнему иметь мои строки, как обсуждалось выше? – mcrsam
@mcrsam У нот всегда есть связанная книга? Или автор является единственным гарантированным отношением? Чтобы это было просто, я бы просто добавил FK из книги в вашу модель заметок. Тогда ваш BookAdmin будет просто использовать NoteInline. Отношение может быть даже необязательным - при необходимости. –
В идеале, заметки всегда должны иметь связанную книгу (например, заметка - это обзор книги. Так как я не могу иметь вложенные строки, это также касается ссылки на автора). Я попытался добавить FK из книги в примечание, но тогда BookAdmin NoteInline показывает новое поле примечания, а не существующую запись заметки (max_num установлен в 1) – mcrsam