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', '?')
を持っているアイテムが1つposition = 2
あり、他のすべてのアイテムがNull
である場合、そのアイテムは位置2ではなく位置1に表示されるためです。
この注文はどのように行いますか?
これについて考えると、データをリストではなくdictとして使用するのがおそらく最善でしょう。たとえば、次のようになります。
`{'1': item or null, '2': item or null, '3': item or null, '?': [list of other items]}`