Django: reverse list of many to many relationship?
-
07-07-2019 - |
Question
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()' ?
Solution
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.
OTHER TIPS
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')
#...
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow