我的models.py看起来像这样:
class House(models.Model):
images = models.ManyToManyField('Image', through='HouseImage')
class HouseImage(models.Model):
house = models.ForeignKey('House')
image = models.ForeignKey('Image')
order = models.IntegerField(default=99)
class Image(models.Model):
url = models.CharField(max_length=200)
我无法编写代码来获取所有House对象以及每个房子在order属性中具有最低值的图像。有没有办法做到这一点,并没有像House对象那样多次点击数据库?
编辑:
HouseImage表
house image order
1 1 1
1 2 2
1 3 3
2 4 2
2 5 1
3 6 1
图片表
id url
1 a
2 b
3 c
4 d
5 e
6 f
我的django查询集中需要以下结果:
house_id image_url
1 a
2 e
3 f
我希望现在更清楚了。
答案 0 :(得分:0)
您可以预取相关的没有额外查询。例如:
houses = House.objects.prefetch_related('houseimage_set__image')
然后,当您循环房屋或正在做的任何事情时,您可以获得最低级的图像:
for house in houses:
houseimages = house.houseimage_set.order_by('order')
if houseimages:
image = houseimages[0].image
else:
image = None
…
编辑:在深入研究之后,似乎每当你拨打.order_by
时,django都会再做一次查询。因此,在这种情况下,您可能需要手动订购houseimages
。例如:
houseimages = sorted(house.houseimage_set.all(), key=lambda x: x.order)