Django:反对多对多关系列表?

时间:2009-09-14 14:14:58

标签: django-models django-admin

我在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()'吗?

2 个答案:

答案 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')
    #...