使用外键过滤的摘要数据生成单个查询集?

时间:2013-05-18 19:43:17

标签: django django-models django-views

我有一个小的Django项目需要学习(它是RANCID备份软件的Web UI),我遇到了一个问题。

该应用程序的模型定义了Devices和DeviceGroups。每个设备都是一个组的成员,并有几个状态标志 - 启用,成功 - 以指示它们是否正常运行。这是相关的部分。

class DeviceGroup(models.Model):
    group_name = models.CharField(max_length=60,unique=True)

class Device(models.Model):
    hostname = models.CharField(max_length=60,unique=True)
    enabled = models.BooleanField(default=True)
    device_group = models.ForeignKey(DeviceGroup)    
    last_was_success = models.BooleanField(default=False,editable=False)

我在前面的“信息中心”页面上有一个摘要表,其中显示了所有组的列表,并为每个组显示了其中有多少个设备。我还想显示活动设备的数量,以及每组失败(即不是last_was_success)设备的数量。普通设备计数已通过ForeignKey字段提供。

这似乎是注释的目的,但并不完全。实际上,我不确定我是如何使用原始SQL做的。最有可能是三个查询,一些查询或子查询。

所以 - 在Django中可能'很好'吗?或者,您如何在模板或视图中再次加入?传递给模板的对象只是:

device_groups = DeviceGroup.objects.order_by('group_name')

目前,我认为我不能只是“手动”将额外字段添加到查询集结果中,是吗?即它不是一个字典或类似的。

1 个答案:

答案 0 :(得分:0)

我认为你必须使用

device_groups = DeviceGroup.objects.all().order_by('group_name')

device_groups = DeviceGroup.objects.filter(condition).order_by('group_name')