2017-12-12 6 views
0

Ich habe ein Benutzermodell und ein Gruppenmodell.Django viele zu viele Beziehung

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') 

Ich habe ein Szenario, in dem ein Benutzer ein Administrator oder nur ein Mitglied einer Gruppe sein kann. Eine Gruppe kann viele Admins haben, genauso wie sie viele Mitglieder haben kann. Wie kann ich eine solche Beziehung in Django definieren und Dinge wie "Admins einer Gruppe", "Mitglieder der Gruppe", "Gruppen, in denen ein Benutzer ein Admin ist", "Gruppen, in denen ein Benutzer Mitglied ist"

Antwort

3

Sie sollten ManyToMany Zwischenmodell mit 'durch' Argument verwenden.

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) 

alle Mitglieder in einer 'Gruppe'

group.members.all() 

alle Admins der 'Gruppe'

group.members.filter(groupmembership__role=1) 

Alle Gruppen, in denen 'john' admin ist

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

Gruppen mit 'Benutzer' ist admin

+0

** Wie ein Mitgliedschaftsobjekt zu erstellen.?** Ich versuche, ein Mitgliedschaftsobjekt in Modell speichern Methode eines Modells say 'Konto' zu erstellen. – albinantony143