Python 选择相关-外键中的一个对象

Python 选择相关-外键中的一个对象,python,django,Python,Django,型号。py: class Car(models.Model): pass class Pictures(models.Model): car = models.ForeignKey(Car, related_name='pictures') image = models.ImageField(upload_to = get_file_path, max_length=64,) cars = Car.objects.all().select_related('pictu

型号。py:

class Car(models.Model):
    pass

class Pictures(models.Model):
    car = models.ForeignKey(Car, related_name='pictures')
    image = models.ImageField(upload_to = get_file_path, max_length=64,)
cars = Car.objects.all().select_related('pictures__image').filter(active=1,).order_by('price').reverse()
所以,一辆车可以有很多图片。一页我需要写一些关于每辆车的信息,只有那辆车的一张照片

视图。py:

class Car(models.Model):
    pass

class Pictures(models.Model):
    car = models.ForeignKey(Car, related_name='pictures')
    image = models.ImageField(upload_to = get_file_path, max_length=64,)
cars = Car.objects.all().select_related('pictures__image').filter(active=1,).order_by('price').reverse()
但它不起作用。我在
Car
中使用此方法:

@property
    def default_picture(self):
        try:
            return self.pictures.all()[:1][0]
        except IndexError:
            return None
但它向db再发出一个请求。这是一个糟糕的解决方案

如何处理对db的最小请求


谢谢

单次查询无法完成此操作。但是使用django的
prefetch_related()
可以将查询数量减少到两个:

cars = Car.objects.all().prefetch_related('pictures')

@property
def default_picture(self):
    pics = self.pictures.all()
    return pics[0] if pics else None

文档在这里:

以及如何在模板中使用图片的url
car.default\u picture.url
?否。要在模板中显示ImageField的url,必须使用
image
字段。不要忘记显示上传图像的路径:
谢谢!我是否每次都有2个查询?50辆车-2次查询?是的,在这种情况下,每次将有2次查询:-),但我建议您阅读中的手册,了解预取缓存的详细说明。