我刚刚开始学习 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
请您参考如下方法:
您的实现就快完成了。看起来你不需要 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 的公司可以拥有自己的公司帐户以及用户名/密码等。然后,为 stack_overflow 工作的招聘人员也可以拥有自己的帐户和自己的用户名/密码等。运行类似 stackoverflow.recruiter_set 的命令将为您提供为 stack_overflow 工作的所有招聘人员。
注意我 do not reference User directly .如果您决定将来切换用户模型,使用上述方法会让您的生活更轻松。
我假设您不想创建一个 User,然后创建一个 Company 并将其链接到该用户 - 您只想一次完成.这是一个稍微不同的问题,解决方案将涉及您创建一个注册 Form ,或类似的东西,您可以在其中添加一些关于用户是公司、招聘人员还是求职者的逻辑。
关于您的其他观点,您似乎正在寻求设置用户权限。 Here是为自定义用户设置默认权限的文档,here是 Django 内置权限系统的一般文档。例如,您的公司和招聘人员模型可以为 has_perm('your_app.add_job') 返回 True,而您的 Jobseeker 模型返回 False。 IE。公司和招聘人员可以创造就业机会,但求职者不能。
希望这对您有所帮助!
