我只是在学习Django,所以我想到创建一个名为Job Board的项目来更详细地了解。我画了以下用例。
这种用例的模型设计如何?我对Django中的多种用户类型感到困惑。有些支持创建用户个人资料,有些支持使用网上论坛。
目前,我只能执行以下操作
class User(AbstractUser):
'''
Abstract user because django recommends to start with custom user
'''
username = None
email = models.EmailField(_("Email Address"), unique=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = UserManager()
def __str__(self):
return self.email
class Company(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
我可以为用户和公司创建模型。但是我不知道如何处理多种用户类型,例如用户可以是求职者或招聘者。此外,公司的多个代表应能够注册和发布职位,并且也可以有独立的招聘人员。如果必须,您将如何处理这种情况?有人可以帮助我逐步指导吗?这样可以消除我的困惑,并在将来帮助我更好地设计表。
简要概述示例
class User(models.Model):
'''
User can be of any 3 types or can have multiple role as well
'''
is_job_seeker = models.BooleanField(default=False)
is_recruiter = models.BooleanField(default=False)
is_mentor = models.BooleanField(default=False)
class Company(models.Model):
user = models.ForeignKey(User) # only user with is_recruiter flag active can be
class JobSeeker(models.Model):
user = models.OneToOneField(User)
# job seeker profile related fields like experiences, skills, education, profile image etc
class Recruiter(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
company = models.ForeignKey(Company, null=True, blank=True)
# recruiter related profile
答案 0 :(得分:1)
您的实现即将完成。看来您现在不需要custom user model,所以我只用Django的default。
我会有类似的东西
from django.conf import settings
from django.db import models
class Company(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
)
# Other company-related fields
class JobSeeker(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
)
# Other jobseeker-related fields
class Recruiter(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
)
company = models.ForeignKey(Company, null=True, blank=True)
# Other recruiter-related fields
创建上述任何模型时,可以为其分配用户帐户;对于招聘者,您可以分配他们工作的公司。例如,名为stack_overflow的公司可以拥有自己的公司帐户,并带有用户名/密码/ etc。然后,为stack_overflow工作的招聘人员也可以拥有自己的帐户,并带有自己的用户名/密码/ etc。运行stackoverflow.recruiter_set
之类的命令将为您提供所有为stack_overflow工作的招聘人员。
请注意,我do not reference User
directly。如果您决定将来切换用户模型,使用上述方法可以使您的生活更轻松。
我假设您不想创建User
,然后创建Company
并将其链接到该用户-您只想一次完成。这是一个稍有不同的问题,解决方案将涉及您创建注册Form或类似的东西,您可以在其中添加一些有关用户是公司,招聘人员还是求职者的逻辑。
关于您的其他观点,您似乎希望设置用户权限。 Here是为自定义用户设置默认权限的文档,而here是Django内置权限系统的常规文档。例如,您的Company and Recruiter模型可以为True
返回has_perm('your_app.add_job')
,而Jobseeker模型可以返回False
。即公司和招聘人员可以创建工作,但求职者却不能。
希望这会有所帮助!