【问题标题】:Django Image by Foreign Key and {% if / else %}Django Image by Foreign Key and {% if / else %}
【发布时间】:2019-02-21 18:17:39
【问题描述】:

我试图访问通过ForeignKey 分配给另一个模型的模型的ImageField

我的项目中有不同的动物应用程序,结构几乎相同,例如以下 models.py。在我的项目的登录页面上,我想显示每个(物种)模型的最后 3 个条目,其中包含名称和图片。如果物种没有图片,我想显示农场的 ImageField,它通过 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 呢?

或者换句话说,我该如何告诉 Django:

“如果您在 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()

感谢每一个提示。

【问题讨论】:

  • 如果您想显示某个特定农场的所有奶牛图像,那么您的代码在 {% for cow in farm.cows_set.all %} 的另一边是正确的。您将_set 用于反向关系,而不是用于关系本身(即farm)。
  • 啊,好吧,在我的模型结构中反过来。很高兴知道。谢谢

标签: django django-models django-templates django-views


【解决方案1】:

你把事情复杂化了。每头奶牛只有一个农场:您只需直接访问即可。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多