Django: отображение модели внешнего ключа в шаблоне детального просмотра родительской модели - PullRequest
0 голосов
/ 03 октября 2019

У меня есть две следующие модели:

class SpecimenImage(models.Model):
   image = ImageField(upload_to='images/')
   usi_image = models.ForeignKey('SpecimenRecord', on_delete=models.SET_NULL, null=True, blank=True, verbose_name='Unique Specimen Identifier')
   ...

class SpecimenRecord(models.Model):
   usi = models.CharField(primary_key=True, max_length=20, verbose_name='Unique Specimen Identifier')
   species = models.ForeignKey(Species, on_delete=models.SET_NULL, null=True, blank=True)
   locality = models.ForeignKey(Locality, on_delete=models.SET_NULL, null=True, blank=True)
   date = models.DateField(null=True, blank=True)
   collector = models.ManyToManyField(Collector, verbose_name='Collector(s)', null=True, blank=True)
   ...

У меня есть общее подробное представление для SpecimenRecord:

...
class SpecimenDetailView(generic.DetailView):
    model = SpecimenRecord

Вот urls.py:

...
urlpatterns = [
    ...
    path('specimen/<str:pk>', views.SpecimenDetailView.as_view(), name='specimen-detail'),
    ]

У меня вопрос, как мне отобразить и просмотреть все экземпляры SpecimenImage, связанные с одним объектом SpecimenRecord в HTML-шаблоне? Я могу легко отобразить информацию для каждого SpecimenRecord, используя {{ specimenrecord.usi }} и т. Д., Но не могу понять, как отобразить каждое изображение.

Я пытался использовать информацию на веб-сайте MDN для общегоподробные виды (https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Generic_views):

{% for copy in book.bookinstance_set.all %}
  <!-- code to iterate across each copy/instance of a book -->
{% endfor %}

Вот код, который я пробовал в моем шаблоне specimenrecord_detail.html:

{% extends "base.html" %}
{% load thumbnail %}

{% block content %}
...
  {% for copy in specimenrecord.specimenimage_set.all %}
    <div class="gallery">
      <img src="{% thumbnail copy.image '1920' as im %}{{ im.url }}{% endthumbnail %}" alt="specimen image"
        srcset="
          {% thumbnail copy.image '544' as im %}  {{ im.url }} {{ im.x }}w{% endthumbnail %},
          {% thumbnail copy.image '768' as im %}  {{ im.url }} {{ im.x }}w{% endthumbnail %},
          {% thumbnail copy.image '992' as im %}  {{ im.url }} {{ im.x }}w{% endthumbnail %},
          {% thumbnail copy.image '1200' as im %}  {{ im.url }} {{ im.x }}w{% endthumbnail %},
          {% thumbnail copy.image '1920' as im %}  {{ im.url }} {{ im.x }}w{% endthumbnail %}"
        alt="specimen image"
        sizes="100vw"
      />
    </div>
  {% endfor %}
{% endblock %}

Однако этот код дал пустое значение <div>. Что такоеЯ делаю не так?

1 Ответ

0 голосов
/ 06 октября 2019

Поиграв с кодом, я нашел решение. Оборачивая приведенный ниже код вокруг <img src>, изображения появляются в div:

<a target="_blank" href="{{ copy.image.url }}">
  <img src=.....>
</a>

(я не уверен, почему это работает, но я рад, что получил желаемый результат).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...