Изображение Django по внешнему ключу и {% if / else%} - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь получить доступ к ImageField модели, которая назначена через ForeignKey другой модели.

У меня есть разные приложения Animal в моих проектах, с почти такой же структурой, как в следующих моделях.py.На целевой странице Моего Проекта я хочу отобразить последние 3 записи каждой (Видовой) Модели с Именем и Картинкой.Если у вида нет изображения, я бы хотел отобразить поле изображения фермы, которое через ForeignKey связано с моими видами.

cows / models.py

class Farm(models.Model):
    name = models.CharField(max_length=100)
    farm_img = models.ImageField(upload_to='farm_images/',
    max_length=255, null=True, blank=True)

class Cows(models.Model):
    farm = models.ForeignKey(Farm, on_delete=models.CASCADE, null=True)
    name = models.CharField(max_length=100)
    entry_date = models.DateField(null=True, blank=True)
    cow_img = models.ImageField(upload_to='farm_images/',
    max_length=255, null=True, blank=True)

Views.py

class HomeIndex(TemplateView):
    template_name = 'home.html'

    def get_context_data(self, **kwargs):
    context['chickens'] = Chicken.objects.order_by('-entry_date')[:3]
    context['cows'] = Cows.objects.order_by('-entry_date')[:3]
    context['cats'] = Cats.objects.order_by('-entry_date')[:3]

        return context

home.html

<….>
        {% for somecow in cows %}
        <div class="col-3" id="p1">
            <h2>{{ somecow.name }}</h2>
            <h2>{{ somecow.entry_date }}</h2>
            {% if somecow.cow_img %}
            <img src="{{ somecow.cow_img.url }}" alt="Mod" height="100">
            {% endif %}
        </div>
        {% endfor %}
<….>

Пока здесь это не сработало.


Но как я могу получить доступ к FK.Model модели?

Или другими словами, как я могу сказать Джанго:

«Если вы не нашли изображения коровы в Cow.Model, то покажите изображение фермы из назначенной Farm.Model?»

Как я понимаю, я могу получить доступ к назначенным моделям FK через

{% for something in MyModel1.MyModel2_set.all %}.

мой подход к home.html

<….>
 {% for somecow in cows %}
    <div class="col-3" id="p1">
     <h2>{{ somecow.name }}</h2>
     <h2>{{ somecow.entry_date }}</h2>

      {% if somecow.cow_img %}
          <img src="{{ somecow.cow_img.url }}" alt="Mod" height="100">
      {% else %}

           {% for farm in somecow.farm_set.all %}
               {% if farm.farm_img %}
               <img src="{{ farm.farm_img.url }}" alt="Mod" height="100">
               {% endif %}
          {% endfor %}
      {% endif %}
    </div>
{% endfor %}
<….>

До сих пор я не получил сообщения об ошибке, но я также не вижу изображения фермы.Я уверен, что я что-то перепутал в home.html.С другой стороны, я думаю, что, может быть, я что-то упустил, на мой взгляд, что-то вроде MyModel.objects.all()

Я благодарен за каждый намек.

1 Ответ

0 голосов
/ 21 февраля 2019

Вы слишком усложняете вещи.На одну корову приходится только одна ферма: вам просто нужен прямой доступ к ней.

   {% else %}
       {% if cow.farm.farm_img %}
           <img src="{{ cow.farm.farm_img.url }}" alt="Mod" height="100">
       {% endif %}
   {% endif %}
...