Pergunta

Eu tenho dois modelos simples em models.py: Service and host. Host.services tem uma relação de m2m com Service. Em outras palavras, um host tem vários serviços e um serviço pode residir em múltiplos hosts; um m2m básico.

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

Como faço para obter uma saída de um-para-muitos na interface de administração, com o 'Serviço' a classe de base (a inversa de muitos para muitos?).

Do eu preciso usar '_set.all ()'?

Foi útil?

Solução

Use related_name sobre os serviços:

services = models.ManyToManyField(Service, related_name='hosts')

e, em seguida, fazer

service.hosts.all()

para obter os anfitriões para um serviço.

Outras dicas

Isto parece fazer o truque:

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')
    #...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top