在Django

时间:2018-05-21 16:18:20

标签: django django-models

我似乎无法弄清楚如何在Django中遵循此模式最佳地实现用户模型:

All are members, some are staff and must be part of a committee, where each committee has a leader

我正在创建一个自定义管理界面供我使用。我已经扩展了AbstractBaseUser类来创建一个代表所有成员的新类User,但是有些字段与成员无关。

class User(AbstractBaseUser):

first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
username = models.CharField(max_length=20, unique=True)
date_joined = models.DateTimeField(auto_now_add=True)
email = models.EmailField(max_length=100, default='')
phone_number = models.CharField(default='', blank=True)
balance = models.IntegerField(default=0)
minimum_balance = models.IntegerField(default=0)

status = models.CharField(choices=STATUS, default=STATUS_ACTIVE)
committee = models.CharField(choices=COMMITTEE, default=COMMITTEE_1)

objects = MyUserManager()

USERNAME_FIELD = 'username'
EMAIL_FIELD = 'email'
REQUIRED_FIELDS = ['first_name',
                   'last_name',
                   'email',]

def get_full_name(self):
    return "{0} {1}".format(self.first_name,self.last_name)

def get_short_name(self):
    return self.first_name

def __str__(self):
    return self.username

普通会员不需要这些字段:

status = models.CharField(choices=STATUS, default=STATUS_ACTIVE)
committee = models.CharField(choices=COMMITTEE, default=COMMITTEE_1)

这些字段是否应包含在User类中并成为组的一部分,还是应该在其他地方?如何在这个Django模型中代表一个委员会的领导者?另外,有没有更好的方法在Django中实现这样的用户层次结构?

1 个答案:

答案 0 :(得分:0)

你可以像这样为委员会创建一个模态。

Class Committee(models.Model):
    name = models.CharField(max_length=255, unique=True)
    members = models.ManyToManyField(User)
    leader = models.ForeignKey(User)

以上模型描述不会有多个具有相同名称的委员会,委员会将有一些成员和一个领导者。