Запрос Django получает последние записи для каждой записи и отображается в виде объединенного списка - PullRequest
0 голосов
/ 14 апреля 2010

У меня есть две модели устройства и настройки журнала как таковые:

class device(models.Model):
   name = models.CharField(max_length=20)   
   code = models.CharField(max_length=10)
   description = models.TextField()

class log(model.Model):
   device = models.ForeignKey(device)
   date = models.DateField()
   time = models.TimeField()
   data = models.CharField(max_length=50)

как получить список, содержащий только самые последние записи / журналы (на основе времени и даты) для каждого устройства, и объединить их в следующем формате:

имя, код, дата, время, данные

Будучи новичком в Django, я хотел бы реализовать это, используя ORM Django. ТИА!

EDIT:

все еще не работает для меня, хотя я попробовал этот подход:

devices=device.objects.annotate(latest_log_date=Max('log_date')),latest_log_time=Max('log_time'))

logs=get_list_or_404(log.objects.filter(date__in=[b.latest_log_date for b in devices],time__in=[b.latest_log_time for b in devices]))`

он только дает мне самый последний журнал с каждого устройства ... не объединяет, конечно, оба ... но исходя из этого, как мне представить его в имени, коде, дате, времени, формате данных?

1 Ответ

0 голосов
/ 14 апреля 2010

Примерно так:

for d in device.objects.all():
    try:
        l = d.log_set.all().order_by('-date','-time')[0]
        text = "%s,%s,%s,%s,%s" % (d.name, d.code, l.date, l.time, l.data)
        #do something with text
    except:
        pass

Попытка / исключение предназначена для случаев, когда для устройства не найдено ни одного журнала. Может быть, вам нужно поставить что-то вроде str (d.date), чтобы форматирование работало (или даже лучше, используйте некоторое strftime или что-то подобное, чтобы придать ему нужный формат).

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