我有两个模型设备和日志设置:
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新手我想用Django的ORM来实现它。 TIA!
编辑:
仍然不适合我,虽然我尝试了这种方法:
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]))`
它只为我提供了每个设备的最新日志...当然没有结合...但是基于我如何在名称,代码,日期,时间,数据格式中提供它?
答案 0 :(得分:0)
这样的事情:
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或类似的东西来为它提供你想要的格式)。