Использование `select_related` с таблицей с составным первичным ключом [Django] - PullRequest
1 голос
/ 27 февраля 2020

Есть ли способ для Django для поддержки составного первичного ключа в комбинации select_related или prefetch_related?

У меня есть таблица записей с составным первичным ключом (device_id, создан) с схема, подобная этой (упрощенная):

class Records(models.Model):
    class Meta:
        managed = False
        unique_together = (("device", "created"),)

    # The primary key is really (device_id, created)
    device = models.ForeignKey("hardware.Device", primary_key=True, on_delete=models.CASCADE)
    created = models.DateTimeField(db_index=True)
    value = models.FloatField(default=0)

Запись принадлежит устройству, которое смоделировано следующим образом (упрощенно):

class Device(models.Model):
    car = models.ForeignKey("cars.Car", on_delete=models.CASCADE)
    last_record_at = models.DateTimeField(null=True, blank=True)

I w * sh для выполнения запроса это вернет список устройств, но для каждого из них также будет содержаться последняя запись.

Теоретически это было бы что-то вроде этого:

Device.objects.filter(...).select_related("car", "last_record")

Но очевидно, что "last_record" не является внешним ключом, так как Records содержит составной первичный ключ, который Django не делает support.

Каков наилучший способ сделать это, кроме переписывания запроса в raw sql? Есть ли разумный способ переопределить select_related для обработки составных ключей?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...