gpt4 book ai didi

python - 不同用户类型的django模型设计

转载 作者:太空宇宙 更新时间:2023-11-04 04:09:52 25 4
gpt4 key购买 nike

我刚刚开始学习 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。公司和招聘人员可以创造就业机会,但求职者不能。

希望这对您有所帮助!

关于python - 不同用户类型的django模型设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56514753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com