Как отфильтровать элемент внешнего ключа? - PullRequest
1 голос
/ 01 декабря 2019

Я не уверен, правильно ли я поставил название для того, что мне нужно, но вот в чем дело. У меня две модели.

class Device(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    device_name = models.CharField(max_length=200, null=True, blank=True )
    created_at = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return str(self.device_name)

class StatusActivity(models.Model):
    OFFLINE = 1
    ONLINE = 2
    STATUS = (
        (OFFLINE, ('Offline')),
        (ONLINE, ('Online')),
    )
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    device_id = models.ForeignKey(Device, related_name='status_activity', on_delete=models.CASCADE)
    status = models.PositiveSmallIntegerField(choices=STATUS)
    modified_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return str(self.device_id) 

Я могу получить список StatusActivity и Device отдельно. Но мне нужен последний статус для каждого устройства.

Устройства:

Id                                  Created_At                  Device_name
5b9bbd0f02f8428ca69a582a491f0751    2019-11-30 15:38:37.076440  Temperature Device
17c1ac3ed05844cd879c218effaba15e    2019-11-30 15:39:14.716443  Humidity Device
a0ca21a555b246b99be965db4493276f    2019-11-30 15:39:27.822114  Motion Device

StatusActivities:

Id                               Status Modified_at                 Device_id_id
350fed049ba04541a7b6d81932d5824b    2   2019-11-30 15:39:39.849491  5b9bbd0f02f8428ca69a582a491f0751
e4f317b56bbb46eb9309ba77da692af0    1   2019-11-30 15:39:47.912013  5b9bbd0f02f8428ca69a582a491f0751
e0a021dd53734d3b9a15e53ad93bbb28    2   2019-11-30 15:41:04.891823  5b9bbd0f02f8428ca69a582a491f0751
1c12c64708234df6992883b377d3102f    2   2019-11-30 17:12:58.336177  17c1ac3ed05844cd879c218effaba15e
8d280d522baa449588b9a9ab67ed7bae    1   2019-11-30 17:13:05.987487  a0ca21a555b246b99be965db4493276f

Пример результата должен быть таким:

ID                                  device_name         Status      Modified_at
5b9bbd0f02f8428ca69a582a491f0751    Temperature Device      2       2019-11-30 15:39:39.849491
17c1ac3ed05844cd879c218effaba15e    Humidity Device         2       2019-11-30 17:12:58.336177  
a0ca21a555b246b99be965db4493276f    Motion Device           1       2019-11-30 17:13:05.987487
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...