Django Modelo API pesquisa inversa de muitos para muitos relação através da tabela intermediário

votos
4

Eu tenho um residente e não consigo obter o conjunto de SSA do residente pertence. Eu tentei res.ssa_set.all() .ssas_set.all()e .ssa_resident_set.all(). Parece que não consegue controlá-lo. O que é a sintaxe para uma pesquisa m2m reversa através de outra tabela?

EDIT: Estou recebendo uma 'QuerySet como nenhum atributo' erro. Erm?

class SSA(models.Model):
    name = models.CharField(max_length=100)
    cost_center = models.IntegerField(max_length=4)
    street_num = models.CharField(max_length=9)
    street_name = models.CharField(max_length=40)
    suburb = models.CharField(max_length=40)
    post_code = models.IntegerField(max_length=4, blank=True, null=True)

    def __unicode__(self):
        return self.name

class Resident(models.Model):
    cris_id = models.CharField(max_length=10, primary_key=True)
    first_name = models.CharField(max_length=20)
    last_name = models.CharField(max_length=20)
    ssas = models.ManyToManyField('SSA', through='SSA_Resident', verbose_name=SSAs)

    def __unicode__(self):
        return self._get_full_name()

    def _get_full_name(self):
        return u%s %s %(self.first_name, self.last_name)

    full_name = property(_get_full_name)

class SSA_Resident(models.Model):
    id = models.AutoField(primary_key=True)
    resident = models.ForeignKey('Resident')
    ssa = models.ForeignKey('SSA', verbose_name=SSA)
    active = models.BooleanField(default=True)
    def __unicode__(self):
        return u%s - %s %(self.resident.full_name, self.ssa.name)
Publicado 15/02/2009 em 05:03
fonte usuário
Em outras línguas...                            


1 respostas

votos
1

Eu estava tentando avaliar um objeto conjunto de consulta, não o objeto em si. Executando um get na consulta definir e, em seguida, uma pesquisa do conjunto relação funcionou bem. Eu estou mudando a comunidade wiki e deixando este aqui só meter alguém é tão estúpido como eu era.

Um exemplo de trabalho:

resident = Resident.objects.filter(name='Johnny')
resident.ssa_set.all() # fail
resident = resident.get() # will fail if more than one returned by filter
resident.ssa_set.all() # works, since we're operating on an instance, not a queryset
Respondeu 15/02/2009 em 05:07
fonte usuário

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