对不起,这个问题太让人困惑了,我找不到更好的表达方式。用一个例子可以更好地解释这一点:
我有一个图像模型链接到一个游戏模型。每个图像都有一个类别(类别是固定的,数字大约为10)。我想得到每个类别的3张图片(或者更少,如果不够的话)。
这是当前的实施:
from django.db import models
class Game(models.Model):
...
class Image(models.Model):
category = models.CharField()
image = models.ImageField()
game = models.ForeignKey(Game)
@classmethod
def categories(cls):
return ('category1', 'category2', ...)
@classmethod
def get_game_images(cls, game:Game):
return [cls.objects.filter(game=game, category=category)
for category in cls.categories()]
# Do stuff with the images
game = Game.objects.all().first()
for category in Image.get_game_images(game):
print(category)
for image in category:
print('\t', image.image.url)
我觉得有点傻做10个非常类似的查询检索3个元素每个。。。一个简单的 Image.objects.filter(game=game).order_by('category')
很接近,但是确保每个类别只有3行变得有点复杂。有没有更好的方法来达到同样的效果?
谢谢您
1条答案
按热度按时间lc8prwob1#
您可以使用单个查询来合并某些子查询:
因此,这将产生一个查询,而且
QuerySet
所以如果你不把它列举出来,就打电话给我len(…)
它不会进行查询。这个
[:3]
最后意味着我们最多只能拿三件东西game
以及category
.