我似乎无法弄清楚如何在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中实现这样的用户层次结构?
答案 0 :(得分:0)
你可以像这样为委员会创建一个模态。
Class Committee(models.Model):
name = models.CharField(max_length=255, unique=True)
members = models.ManyToManyField(User)
leader = models.ForeignKey(User)
以上模型描述不会有多个具有相同名称的委员会,委员会将有一些成员和一个领导者。