Как вернуть несколько объектов, связанных с ForeignKey в Django
у меня есть следующее В моем 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)
Я хотел бы вернуть запрос для объектов, связанных с неким "менеджером". Проблема в том, что пользователь может добавлять / удалять столько менеджеров, сколько он хочет. Так что моей первой мыслью было views.py что-то вроде этого:--3-->
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.
4 ответов
вы можете запросить на связанные объекты вот так:
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
.
Кажется, что вы хотите попросить HostData вернуть все объекты, связанные с определенным менеджером. Если это так, то вы должны знать одну уникальную информацию о конкретном менеджере, которого вы ищете.
для аргумента предположим, что менеджер " id " используется в качестве первичного ключа и, следовательно, уникален, и мы ищем id = 5.
id = 5
hostdata = HostData.objects.filter(Manager__id=id)
Я думаю (может быть??) вы ищете что-то подобное...
managers = Managers.objects.all()
host_data = HostData.objects.filter( managers__in=managers )
тогда вы можете сделать цикл внутри представления?
Я не совсем уверен, что это сработает, но дайте мне знать, если это поможет.
просто добавьте наборы данных хоста динамически в контекст шаблона:
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 %}