models.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,)
所以,一辆车可以有很多照片。一页我需要写一些关于每辆车的信息,只有一张车的图片。
views.py:
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的min请求做我想要的事情?
谢谢!
答案 0 :(得分:1)
您无法通过单个查询执行此操作。但是使用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