【问题标题】:Django - Get First image from Foreign related table in Django 3.1Django - 从 Django 3.1 中的外部相关表中获取第一个图像
【发布时间】:2020-11-26 20:59:40
【问题描述】:

请我使用 Django 3.1,我想弄清楚如何从外部表中获取一个图像 - 在主视图中 - 应该有所有车辆的卡片,并且每个车辆只有第一张图像 - 作为缩略图。

这是我的models.py:

class Vehicle(models.Model):
    make = models.ForeignKey(Make, on_delete=models.PROTECT)
    model = models.ForeignKey(Model, on_delete=models.PROTECT)
    year = models.PositiveSmallIntegerField()
    ...

    def first_image(self):
       return self.image_set.first()

class Image(models.Model):
    vehicle = models.ForeignKey(Vehicle, on_delete=models.PROTECT)
    image = models.ImageField(upload_to='images/')

在我的模板中,我试图通过以下方式获取车辆的第一张图片:

{% for v in vehicles %}
   <img src="{{ v.first_image.image.url }}" alt="">
{% endfor %}

我也尝试过 {{ v.first_image.url }} 但没有任何效果。 我尝试向 first_image 添加一个打印功能(与 return - self.image_set.first() 相同),它得到 Nonecatalog.Image.None

当我打印一辆车的所有图像时,它可以通过以下方式完美运行:

{% for i in images %}
   <img src="{{ i.image.url }}" alt="">
{% endfor %}

views.py:

from django.shortcuts import render
from .models import Vehicle, Image


def home_view(request):
    vehicles = Vehicle.objects.all()
    context = {
        'vehicles': vehicles,
    }
    print(context)
    return render(request, 'home.html', context)

def vehicle_detail_view(request, slug_make, slug_model, slug_vehicle):
    vehicle = Vehicle.objects.get(
        make__slug=slug_make, model__slug=slug_model, slug=slug_vehicle)
    images = Image.objects.filter(vehicle=vehicle)
    context = {
        'vehicle': vehicle,
        'images': images
    }
    return render(request, 'vehicle_detail.html', context)

我不知道,怎么弄出来的,我只是猜测在Vehicle表中创建另一个字段,并称之为thumbnail

感谢您的帮助

【问题讨论】:

    标签: django django-models foreign-keys django-orm


    【解决方案1】:

    它有效,我只是在限制时犯了一个错误:

    def home_view(request):
        vehicles = Vehicle.objects.all()[:1]
    

    我很抱歉

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-07
      • 2017-04-29
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多