Sto creando un gruppo di persone e un'iscrizione come descritto in Documenti Django per il modello intermedio.Campi di accesso nel modello intermedio Django
class Person(models.Model):
name = models.CharField(max_length=128)
def __unicode__(self):
return self.name
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
def __unicode__(self):
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
E 'possibile accedere alla persona da un oggetto di gruppo con:
>>>Group.members.name
fa Django crea un'altra query per andare a prendere la persona? Posso accedere al campo date_joined
da un oggetto Gruppo?
La cosa che confonde me è che mi aspetto di ottenere il campo del nome Persona con:
>>>Group.members.person.name
Cosa succede se una persona ha un campo 'nome' e anche il modello intermedio hanno un campo 'nome '.
Quello che stai dicendo senso perfetto e in forma come capisco modelli in Django. Ciò che mi ha confuso era django docs sul modello intemedaite su http://docs.djopoproject.com/en/1.0/topics/db/models/#extra-fields-on-many-to-many-relationships Mostrano questo esempio con gli stessi modelli sopra: # Trova tutti i gruppi con un membro il cui nome inizia con 'Paul' >>> Group.objects.filter (members__name__startswith = 'Paul') [] Mi aspetterei deve essere: >>> Group.objects.filter (members__person__name__startswith = 'Paul') –
pablo
È "Group.objects.filter (members__name__startswith = 'Paul')" perché i membri sono Manager. Devi assicurarti di capire che i membri non sono un oggetto Membership, ma un oggetto ManyRelatedManager. Penso che potrebbe aiutarti se leggi di più su cosa sono esattamente i Manager. Post scriptumSe digiti "python manage.py shell" in un progetto che ha quei modelli, puoi provare a inserire "Group.objects.filter (members__person__name__startswith = 'Paul')" e vedere cosa succede - forse questo ti aiuterà? –
Capisco che i membri sono un manager e ho letto dei gestori. Non capisco come i membri decidano di utilizzare il nome per Persona e non per Gruppo. Entrambi hanno questo campo. È anche possibile che l'appartenenza abbia un nome di campo. Vorrei filtrare questo? – pablo