ajuda com complexo de participar Django ORM

votos
3
class Domains(models.Model):
    name = models.CharField(max_length=30)
    description = models.CharField(max_length= 60)
    user = models.ManyToManyField(Users, blank=True, null=True)
    def __unicode__(self):
        return self.name

class Groups(models.Model):
    domain = models.ForeignKey(Domains)
    name = models.CharField(max_length=30)
    description = models.CharField(max_length= 60)
    def __unicode__(self):
        return self.name

class Users(models.Model):
    login = models.CharField(max_length=30, unique=True)
    group = models.ManyToManyField(Groups, blank=True, null=True)
    def __unicode__(self):
        return self.login

Eu tenho o modelo acima. Precisava de alguma ajuda a trabalhar com Django ORM. Como eu poderia criar uma consulta os retornos todos os nomes do grupo que pertencem apenas aos domínios aos quais um usuário pertence

Publicado 13/03/2009 em 19:44
fonte usuário
Em outras línguas...                            


2 respostas

votos
4

comentário que segundo elo80ka sobre o uso de nomes singulares para seus modelos. Para filtrar os grupos de domínio e de usuário, tente:

Groups.objects.filter(domain__user=u)

Este irá realizar juntar ao apropriada em toda a muitos-para-muitos. Como escrito, a consulta retornará objetos do grupo. Se você quer a propriedade nome somente, em seguida, acrescentar o .values_list('name', flat=True)para a consulta como elo80ka sugere.

Respondeu 13/03/2009 em 20:32
fonte usuário

votos
2

Você provavelmente deve usar nomes singulares para suas classes de modelo. Por exemplo, eu reescrever os modelos como:

class Domain(models.Model):
    name = models.CharField(max_length=30)
    description = models.CharField(max_length= 60)
    user = models.ManyToManyField('User', blank=True, null=True)

    def __unicode__(self):
            return self.name

class Group(models.Model):
    domain = models.ForeignKey(Domain, related_name='groups')
    name = models.CharField(max_length=30)
    description = models.CharField(max_length= 60)

    def __unicode__(self):
            return self.name

class User(models.Model):
    login = models.CharField(max_length=30, unique=True)
    group = models.ManyToManyField(Group, related_name='users', blank=True, null=True)

    def __unicode__(self):
            return self.login

Desde que você tem os usuários diretamente relacionada a grupos, você não precisa envolver domínios em tudo. Para buscar todos os nomes de grupo para um usuário específico, você faria:

Group.objects.filter(users__pk=...).values_list('name', flat=True)

Substitua '...' com o ID do usuário que você está interessado.

Respondeu 13/03/2009 em 20:26
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more