如何在Django中返回与ForeignKey相关的多个对象

Rub*_*nes 7 django django-models django-views

我的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)
Run Code Online (Sandbox Code Playgroud)

我想返回与某个"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})
Run Code Online (Sandbox Code Playgroud)

那么,我怎样才能返回多个对象?就像用户添加另一个"管理器"一样,我将在views.py中获得第三组.

Set*_*eth 12

您可以查询相关对象,如下所示:

manager = Managers.objects.get(pk=1) # identify which manager you want
manager.hostdata_set.all()  # retrieve all related HostData objects
Run Code Online (Sandbox Code Playgroud)

在您的模板中,您也可以直接访问hostdata_set:

{% for manager in managers %}
    {% for data in manager.hostdata_set.all %}
      do something with {{ data }}
    {% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

我相信这就是你所要求的.

顺便提一下,如果您的Managers模型存储有关单个"管理器"的数据,您可能会发现将其名称更改为单数非常有用Manager.