Логика упорядочивания Django DateField в случае одинаковых значений DateField

Я пытаюсь понять, какова логика упорядочивания в django DateField в случае, если даты равны? У меня есть модель, в которой есть DateField и DateTimeField (нерелевантные поля убраны).

class Ad(models.Model):
    title = models.CharField(max_length=50)
    content = models.TextField()
    created_at = models.DateField(default=timezone.now)
    created_time = models.DateTimeField(default=timezone.now)

Упорядочение для модели выглядит следующим образом:

class Meta:
    ordering = ['-created_time', '-created_at']

Обратите внимание, что ранее у меня вообще не было created_time = models.DateTimeField(default=timezone.now) и сортировка осуществлялась только через -created_at. Я добавил дополнительный DateTimeField только в целях тестирования, и он никак не повлиял на результат упорядочивания DateField.

Здесь вы можете увидеть порядок создания объектов в БД: enter image description here

А это порядок, в котором объекты фактически упорядочены на ListView странице:

enter image description here

Поле slug в DB может быть использовано как ссылка, чтобы понять, какой объект в шаблоне соответствует какому объекту в DB.

Как видите, первый порядок DateTimeField работает как ожидалось, однако упорядочивание по DateField не совпадает с порядком в БД.

Интереснее всего то, что если я зайду в свой UpdateView и обновлю содержимое объектов "Summernote" (не связываясь с датами), то упорядочение снова изменится, хотя даты и время в БД не менялись.

Посмотрите разницу в порядке после каждого обновления объекта (каждый столбец - это разные снимки из одного и того же представления после обновления объекта): enter image description here

Нет изменений в БД, чтобы проиллюстрировать, что ни DateField, ни DateTimeField не были изменены после обновления объекта: enter image description here

У меня есть пользовательский набор запросов в моем ListView, но он не влияет на упорядочивание, насколько я могу судить

def get_queryset(self):

    shifts = re.findall('standard|shifts|other', self.request.path)
    queryset = super(ListAd, self).get_queryset()
    queryset = queryset.filter(city=self.kwargs['city'], category=self.kwargs['category'],
                               shift__in=shifts,
                               expire__gte=date.today(),
                               publish_status=True)
    return queryset

Почему странное и кажущееся непоследовательным упорядочивание в случае равных дат? Какие еще аспекты учитывает django при упорядочивании объектов, имеющих равные DateField значения?

Вернуться на верх