假设我有一个返回 10 个对象的 QuerySet,其中 3 个将显示在以下位置:
[ display 1 position ] [ display 2 position ] [ display 3 position ]
代表它的模型如下:
class FeaturedContent(models.Model):
image = models.URLField()
position = models.PositiveSmallIntegerField(blank=True, null=True)
其中位置可以是 1、2、3 或未指定 (Null)。
我希望能够随机排序 QuerySet,除了具有指定位置的对象。但是,我不能通过以下方式订购它:
featured_content = FeaturedContent.objects.order_by('-position', '?')
因为如果我有一个具有 的项目position = 2
,而所有其他项目都是Null
,那么该项目将出现在位置 1 而不是位置 2。
我将如何进行此订购?
考虑到这一点,也许最好将数据作为字典而不是列表,例如:
`{'1': item or null, '2': item or null, '3': item or null, '?': [list of other items]}`