我试图访问通过ImageField
分配给另一个模型的模型的ForeignKey
。
我的项目中有不同的Animal Apps,它们的结构几乎相同,例如以下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中的Farm图片?”
据我了解,我可以通过
访问分配的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()
我很感谢每一个提示。
答案 0 :(得分:1)
您太复杂了。每头奶牛只有一个农场:您只需要直接访问它即可。
{% else %}
{% if cow.farm.farm_img %}
<img src="{{ cow.farm.farm_img.url }}" alt="Mod" height="100">
{% endif %}
{% endif %}