Можно ли использовать связанное поле в качестве поля выбора в Django?
В Django, если у меня есть что-то вроде этого:
class Library(models.Model):
name = models.CharField(...)
address = models.CharField(...)
book_of_the_week = ?
class Book(models.Model):
library = models.ForeignKey(Library, on_delete=models.CASCADE, related_name="books")
name = models.CharField(...)
Это дает мне возможность создавать несколько библиотек, каждая из которых содержит большое количество книг.
Для book_of_the_week я хочу, чтобы это была ссылка на экземпляр Book, чтобы в Django Admin поле было представлено в виде выпадающего списка, позволяющего выбирать из книг в текущей библиотеке, а в коде вы могли использовать .book_of_the_week для доступа к конкретному экземпляру Book.
Возможно ли это?
Конечно, это возможно. Но если вы это сделаете, то сможете сохранить только текущую книгу недели. Что произойдет, если вы захотите показать библиотечную книгу недели историю ? Мне кажется, что это вполне вероятный сценарий. Подумайте о том, чтобы сделать что-то вроде:
class Library(models.Model):
name = models.CharField(...)
address = models.CharField(...)
book_of_the_week = ?
class Book(models.Model):
library = models.ForeignKey(Library, on_delete=models.CASCADE, related_name="books")
name = models.CharField(...)
class BookOfTheWeek(models.Model):
book = models.ForeignKey(Book, on_delete=models.CASCADE, related_name='book_of_the_week')
library = models.ForeignKey(Library, ...etc)
week_of = models.DateField()
Таким образом, каждая книга недели будет отдельной записью в базе данных, и вы сможете проследить историю книг недели каждой библиотеки с течением времени.