Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to return multiple objects related with ForeignKey in Django

I have the following in my 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)

I would like to return the query for objects related to a certain "Manager". The problem is that the user may add/delete as many managers as he wants. So my initial thought was to have in my views.py something like this:

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})

So, how can I return multiple objects? Like if the user adds another "Manager" I'll get a third set in my views.py.

like image 850
Ruben Quinones Avatar asked Oct 01 '10 00:10

Ruben Quinones


Video Answer


2 Answers

You can query on related objects like so:

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

In your template, you can also just access the hostdata_set directly:

{% for manager in managers %}
    {% for data in manager.hostdata_set.all %}
      do something with {{ data }}
    {% endfor %}
{% endfor %}

I believe this is what you're asking for.

Incidentally, if your Managers model stores data about a single "Manager", you may find it useful to change it's name to the singular Manager.

like image 109
Seth Avatar answered Sep 28 '22 02:09

Seth


It seems that you want to ask the HostData to return all objects that are related to a certain Manager. If so, then you should know one unique piece of information about the certain Manager you are looking for.

For the sake of argument, let's assume the Manager "id" is used as a primary key and therefore unique and we are looking for a id = 5.

id = 5
hostdata = HostData.objects.filter(Manager__id=id)
like image 43
un33k Avatar answered Sep 28 '22 00:09

un33k