중간 모델 용 Django 문서에 설명 된대로 Person Group 및 Membership을 만듭니다.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)
그것은을 가진 그룹 개체에서 사람을 액세스 할 수 있습니다 :
>>>Group.members.name
합니까 장고가 사람을 가져올 또 다른 조회를 작성? 그룹 개체에서 date_joined
필드에 액세스 할 수 있습니까?
제가 가진 사람 이름 필드를 얻을 것으로 예상 것입니다 혼란 것은 :
사람이 필드 '이름'도 중간 모델을 사용하면 어떻게됩니까>>>Group.members.person.name
이 필드가 '이름 '.
당신이 말하는 것은 완벽한 의미가 내가 장고의 모델을 이해하는 방법을 맞습니다. 나를 혼란스럽게 한 것은 http://docs.djangoproject.com/en/1.0/topics/db/models/#extra-fields-on-many-to-many-relationships의 intemedaite 모델에 대한 django 문서입니다. 그들은 위의 동일한 모델 : # 이름이 'Paul'으로 시작하는 멤버가있는 그룹 찾기 >>> Group.objects.filter (members__name__startswith = 'Paul') [<그룹 : The Beatles>] 나는 그것은 : >>> Group.objects.filter (members__person__name__startswith = 'Paul') – pablo
회원이 Manager이기 때문에 "Group.objects.filter (members__name__startswith = 'Paul')"입니다. 회원은 Membership 객체가 아니라 ManyRelatedManager 객체라는 사실을 이해해야합니다. 관리자가 정확히 무엇인지 자세히 읽으면 도움이 될 것 같습니다. 추신해당 모델이있는 프로젝트에 "python manage.py shell"을 입력하면 "Group.objects.filter (members__person__name__startswith = 'Paul')"을 입력하고 어떤 일이 일어날지를 볼 수 있습니다 - 어쩌면 도움이 될까요? –
회원이 관리자이고 관리자에 대해 읽음을 이해합니다. 회원들이 그룹의 이름이 아닌 개인의 이름을 사용하는 방법을 어떻게 이해하는지 모르겠다. 둘 다이 분야를 가지고 있습니다. 멤버쉽에는 필드 이름이있을 수도 있습니다. 나는 이것을 걸러 낼 것인가? – pablo