Получение последнего объекта связанной таблицы ManytoMany в Django
У меня есть модель Django следующего вида:
class RFIDInventorySerials(models.Model):
serial = models.CharField(max_length=50, blank=True, null=True, default=0)
coordinate = models.CharField(max_length=100, blank=True, null=True, default=0)
timestamp = models.DateTimeField(default=datetime.now)
class RFIDInventory(models.Model):
reference_number = models.IntegerField(default=0)
serials = models.ManyToManyField(RFIDInventorySerials)
и список serial
, например :
s = ['a', 'b', 'c', 'd', 'e']
для каждого serial
я хочу получить последний time_stamp
. Как я могу это сделать?
Я сделал:
last_seen = []
for i, v in df_hr1['Miss'].iteritems():
last = RFIDInventorySerials.objects.filter(serial=v).last()
print("last", last)
last_seen.append(last.start)
Но если список станет длиннее, то цикл не будет решением этой проблемы
попробуйте что-то вроде этого;
serials_list = ['a', 'b', 'c']
# suppose you have a list of serials and want to filter last seen serials
required_result = RFIDInventorySerials.objects.filter(
serial__in=serials_list
).order_by('-timestamp').distinct('serial')
У меня нет никакого механизма проверки, так что это может работать или не работать, но идея заключается в том, чтобы сначала упорядочить по метке времени и выбрать distinct serial