我在models.py中有两个简单的模型:服务和主机。 Host.services与Service有m2m关系。 换句话说,主机有多个服务,一个服务可以驻留在多个主机上;一个基本的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
如何在管理界面中获得一对多输出,以“服务”类为基础(反向多对多?)。
我需要使用'_set.all()'吗?
答案 0 :(得分:3)
在服务上使用related_name
:
services = models.ManyToManyField(Service, related_name='hosts')
然后再做
service.hosts.all()
获取服务的主机。
答案 1 :(得分:0)
这似乎可以解决问题:
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')
#...