【发布时间】: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