Это на самом деле проблема отношений, а не проблема кодирования. Давайте углубимся в это
Это короткая версия вашего Book
класса для иллюстрации.
class Book(models.Model):
pass
Это короткая версия вашего Photo
класса для иллюстрации.
class Photo(models.Model):
book = models.ForeignKey(Book, on_delete=models.CASCADE)
file = models.ImageField(default=random_img, upload_to=content_file_name)
Что такое ForiegnKey
? - ForiegnKey
- это просто причудливое название для ManyToOne
, верно? Сколько здесь и сколько?
Что ж, у нас есть книга с несколькими фотографиями. Таким образом, фотография имеет Key
, как ключ от двери, Она открывает ТОЛЬКО это дверь, Это Key
.
В вашем Photo
классе есть переменная класса, которая называется book. Называть это будет как Photo.book
. Однако, поскольку действует django, вызов обратного отношения будет book.photo_qs
, где photo_qs
- имя по умолчанию для обратных отношений.
Давайте его улучшим.
class Photo(models.Model):
book = models.ForeignKey(Book, on_delete=models.CASCADE, related_name='photos')
file = models.ImageField(default=random_img, upload_to=content_file_name)
Теперь, как и прежде, это все еще photo.book
, но book.photos
(от связанного имени)
В Engli sh, каждый экземпляр книги имеет .photos (связанного типа менеджера). Поэтому, если вы получите книгу типа
my_book = Book.objects.all()[0]
В этой книге есть фотографии типа (Related Manager), ее использование будет похоже на
my_book.photos.all()
Пока все в порядке, теперь проблема означает, что вы хотите отправить изображение с информацией о книге в шаблоне,
Ваш просмотр
def my_view(request):
my_book = Book.objects.all()[0] # first book
return render(request, 'my_template_path', context= {
'my_book': my_book,
})
Теперь ваш шаблон имеет доступ к переменной my_book
.
в вашем шаблоне
{% for photo in my_book.photos.all %}
<img src="{{ photo.file.url }}">
{% endfor %}
Редактируйте в соответствии с вашими потребностями.