Tworzę grupę osób i członkostwo zgodnie z opisem w dokumentach Django dla modelu pośredniego.Pola dostępu w pośrednim modelu 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)
Jest możliwe, aby uzyskać dostęp do obiektu osoba z grupy z:
>>>Group.members.name
Czy Django tworzy kolejne zapytanie do sprowadzenia osoby? Czy mogę uzyskać dostęp do pola date_joined
z obiektu grupy?
Rzecz, która mnie niepokoi to, że będę oczekiwać, aby uzyskać nazwę pola osoba posiadająca:
>>>Group.members.person.name
Co się stanie, jeśli dana osoba ma pole „Nazwa”, a także pośrednią model ma pole „nazwa ".
co mówisz ma sens i pasuje jak rozumiem modeli w Django. Co mnie zdezorientowało to django docs o modelu intemedaite na http://docs.djangoproject.com/en/1.0/topics/db/models/#extra-fields-on-many-to-many-relationships Pokazują ten przykład z te same modele powyżej: # Znajdź wszystkie grupy z członkiem, którego nazwisko zaczyna się od "Paul" >>> Group.objects.filter (members__name__startswith = 'Paul') [] Spodziewałbym się ma to być: >>> Group.objects.filter (members__person__name__startswith = 'Paul') –
pablo
To "Group.objects.filter (members__name__startswith = 'Paul')" ponieważ członkowie są menedżerami. Musisz upewnić się, że rozumiesz, że członkowie nie są obiektem członkowskim, ale obiektem ManyRelatedManager. Myślę, że może ci pomóc, jeśli przeczytasz więcej o tym, czym są Menedżerowie. P.S.Jeśli wpiszesz „python manage.py shell” w projekcie, który ma te modele, można spróbować umieścić w „Group.objects.filter (members__person__name__startswith =«Paul»)” i zobaczyć, co się dzieje - może to pomoże? –
Rozumiem, że członkowie są menedżerami i czytam o menedżerach. Nie rozumiem, w jaki sposób członkowie decydują się używać nazwy dla Osoby, a nie dla Grupy. Oba mają to pole. Jest również możliwe, że członkostwo będzie miało nazwę pola. Czy mogę to przefiltrować? – pablo