2017-12-12 4 views
0

사용자 모델과 그룹 모델이 있습니다.Django 다 대 다 관계

from django.contrib.auth.models import AbstractUser 

class Group(models.Model): 
    name = models.CharField(max_length=200) 

class User(AbstractUser): 
    name = models.CharField(max_length=200) 
    group = models.ManyToManyField('Group') 

나는 사용자가 관리자 또는 그룹의 단지 구성원이 될 수있는 시나리오가 있습니다. 그룹에는 많은 구성원이있을 수있을뿐만 아니라 많은 관리자가있을 수 있습니다. Django에서 이러한 관계를 정의하고 "그룹 관리자", "그룹 구성원", "사용자가 관리자 인 그룹", "사용자가 구성원 인 그룹"과 같은 쿼리를 수행하는 방법은 무엇입니까?

답변

3

ManyToMany 중간 모델 '부터' '인수를 사용해야합니다. 는 '그룹'

group.members.all() 

'존이'관리자

Group.objects.filter(members__name='john', groupmembership__role=1) 
인 '그룹'

group.members.filter(groupmembership__role=1) 

모든 그룹의 모든 관리자를에

class Group(models.Model): 
    name = models.CharField(max_length=200) 
    members = models.ManyToManyField(User, through='GroupMembership', related_name='groups') 

class GroupMembership(models.Model): 
    ROLE_CHOICE = (
     ('1', 'Admin'), 
     ('2', 'Member'), 
    ) 
    user = models.ForeignKey(User, on_delete=models.CASCADE) 
    group = models.ForeignKey(Group, on_delete=models.CASCADE) 
    role = models.CharField(choices=ROLE_CHOICE, default='2', max_length=1) 

모든 구성원

'사용자'가 관리자 인 그룹

user.groups.filter(groupmembership__role=1) 
+0

** 멤버십 개체를 만드는 방법. 모델의 모델 저장 방법 인 'account'에서 멤버 개체를 만들려고합니다. – albinantony143