Reputation: 125
I have two simple models in models.py: Service and Host. Host.services has a m2m relationship with Service. In other words, a host has several services and one service can reside on multiple hosts; a basic m2m.
models.py
class Service(models.Model):
servicename = models.CharField(max_length=50)
def __unicode__(self):
return self.servicename
class Admin:
pass
class Host(models.Model):
#...
hostname = models.CharField(max_length=200)
services = models.ManyToManyField(Service)
#...
def service(self):
return "\n".join([s.servicename for s in self.services.all()])
def __unicode__(self):
return self.hostname
class Admin:
pass
How do I get a one-to-many output in the admin interface, with the class 'Service' as basis (a reverse many-to-many?).
Do I need to use '_set.all()' ?
Upvotes: 4
Views: 5879
Reputation: 125
This seems to do the trick:
class Service(models.Model):
servicename = models.CharField(max_length=50)
def hostname(self):
return "\n".join([s.hostname for s in self.hosts_services.all()])
def __unicode__(self):
return self.servicename
class Host(models.Model):
#...
services = models.ManyToManyField(Service, related_name='hosts_services')
#...
Upvotes: 0
Reputation: 99530
Use related_name
on the services:
services = models.ManyToManyField(Service, related_name='hosts')
and then do
service.hosts.all()
to get the hosts for a service.
Upvotes: 3