我的models.py中有以下内容:
class HostData(models.Model):
Manager = models.ForeignKey(Managers)
Host = models.CharField(max_length=50, null=True)
HostStatus = models.CharField(max_length=200, null=True)
Cpu = models.PositiveIntegerField(max_length=10, null=True)
Disk = models.FloatField(null=True)
我想返回与某个“Manager”相关的对象的查询。问题是用户可以根据需要添加/删除尽可能多的管理员。所以我最初的想法是在我的views.py中有这样的东西:
def get_data(request):
for server in Managers.objects.all():
host_data = HostData.objects.filter(Manager=server)
# Lost after this :(
return render_to_response('mypage.html', {'first_set': host_data1, 'second_set': host_data2})
那么,我怎样才能返回多个对象?就像用户添加另一个“经理”一样,我将在我的views.py中获得第三组。
答案 0 :(得分:12)
您可以像related objects一样查询:
manager = Managers.objects.get(pk=1) # identify which manager you want
manager.hostdata_set.all() # retrieve all related HostData objects
在您的模板中,您也可以直接访问hostdata_set
:
{% for manager in managers %}
{% for data in manager.hostdata_set.all %}
do something with {{ data }}
{% endfor %}
{% endfor %}
我相信这就是你所要求的。
顺便说一句,如果您的Managers
模型存储有关单个“经理”的数据,您可能会发现将其名称更改为单数Manager
很有用。
答案 1 :(得分:2)
似乎您要求HostData返回与某个Manager相关的所有对象。如果是这样,那么您应该知道有关您正在寻找的特定经理的一条独特信息。
为了论证,让我们假设管理器“id”用作主键,因此是唯一的,我们正在寻找id = 5.
id = 5
hostdata = HostData.objects.filter(Manager__id=id)
答案 2 :(得分:0)
我想(也许??)你正在寻找类似......
的东西managers = Managers.objects.all()
host_data = HostData.objects.filter( managers__in=managers )
然后你可以在视图内循环吗?
我不太确定这会有效,但如果有帮助请告诉我。
答案 3 :(得分:0)
只需将主机数据集动态添加到模板上下文中:
def get_data(request):
host_data_sets = []
for server in Managers.objects.all():
host_data_set = HostData.objects.filter(Manager=server)
host_data_sets.append(host_data_set)
return render_to_response('mypage.html', {'host_data_sets': host_data_sets})
然后在您的模板中,您可以迭代数据集:
{% for host_data_set in host_data_sets %}
<!-- do something with host_data_set -->
{% endfor %}