Предположим, что у меня есть QuerySet, который возвращает 10 объектов, 3 из которых будут отображаться в следующих положениях:псевдослучайного упорядочение в Джанго QuerySet
[ 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]}`
Вы должны действительно избегайте случайного упорядочения в вашей базе данных (как также указывает [django documentation] (https://docs.djangoproject.com/en/dev/ref/models/querysets/#order-by), поскольку она имеет тенденцию быть действительно медленный! –
Тогда какой лучший способ сделать то, что мне нужно сделать выше? – David542