Поле Datetime мешает Django order_by в аннотационном запросе

В настоящее время я работаю с тремя моделями, маршрутами, посещениями и контейнерами. Каждый маршрут имеет два посещения, а каждое посещение имеет один контейнер, поэтому я делаю аннотацию на количество маршрутов для каждого контейнера. Мне удалось почти получить желаемый результат, но мне также необходимо поле created_at в моей модели Routes, однако если я вызываю его, сортировка больше не работает.

Модели

class Container(models.Model):
    license_plate = models.CharField(max_length=255)
    container_number = models.IntegerField(default=-1)
    container_type = models.BooleanField(default=True) # True para calientes, False para fríos

    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.license_plate
    
    class Meta:
        db_table = "trucks_containers"

class Attendance(models.Model):
    IN = 'in'
    OUT = 'out'
    CHECKIN_TYPES = [
        (IN, 'in'),
        (OUT, 'out')
    ]
    type = models.CharField(max_length=10, choices=CHECKIN_TYPES)
    closed = models.BooleanField(default=False)
    damaged = models.BooleanField(default=False)

    datetime = models.DateTimeField()
    is_crashed_container = models.BooleanField(default=False)
    is_crashed_truck = models.BooleanField(default=False)
    has_solar_panel = models.BooleanField(default=False)

    truck = models.ForeignKey(Truck, on_delete=models.CASCADE, null=True)
    container = models.ForeignKey(Container, on_delete=models.CASCADE)
    gate = models.ForeignKey(Gate, on_delete=models.CASCADE)
    snapshot = models.ForeignKey(
        general_models.Snapshot,
        on_delete=models.SET_NULL, null=True
    )

    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = "trucks_attendances"

class Route(models.Model):
    start_attendance = models.ForeignKey(
        Attendance,
        related_name='start_attendance',
        on_delete=models.CASCADE
    )
    end_attendance = models.ForeignKey(
        Attendance,
        related_name='end_attendance',
        on_delete=models.CASCADE
    )
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = "trucks_routes"

Почти правильный результат

Используемый запрос:

containers_routes = truck_models.Route.objects\
            .values('end_attendance__container__id',
            'end_attendance__container__container_number',
            'end_attendance__container__license_plate')\
            .annotate(completed_routes=Count('end_attendance__container__id'))\
            .order_by('-completed_routes')

Результат:

<QuerySet [{'end_attendance__container__id': 450, 'end_attendance__container__container_number': 2625, 'end_attendance__container__license_plate': 'JP2495', 'completed_routes': 7}, {'end_attendance__container__id': 227, 'end_attendance__container__container_number': 2104, 'end_attendance__container__license_plate': 'JN7780', 'completed_routes': 3}

Должно быть правильно, но результат неправильный

Используемый запрос:

containers_routes = truck_models.Route.objects\
            .values('created_at','end_attendance__container__id',
            'end_attendance__container__container_number',
            'end_attendance__container__license_plate')\
            .annotate(completed_routes=Count('end_attendance__container__id'))\
            .order_by('-completed_routes')

Результат:

<QuerySet [{'end_attendance__datetime': datetime.datetime(2021, 8, 23, 16, 27, 10, tzinfo=<UTC>), 'end_attendance__container__id': 328, 'end_attendance__container__container_number': 2277, 'end_attendance__container__license_plate': 'HXDK40', 'completed_routes': 1}, {'end_attendance__datetime': datetime.datetime(2021, 8, 30, 16, 16, 41, tzinfo=<UTC>), 'end_attendance__container__id': 793, 'end_attendance__container__container_number': 3971, 'end_attendance__container__license_plate': 'GRJH17', 'completed_routes': 1}

Как вы видите, он не заказывает completed_routes правильно, когда я добавляю любые поля с датами в .values(), я также пробовал с датами, хранящимися в модели Attendances, но произошло то же самое. Что я упускаю?

NOTE Я разместил только первые два пункта, чтобы показать, что они меняются при добавлении нового поля. Зарегистрировано около 900 различных контейнеров.

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