【发布时间】:2019-06-09 12:53:55
【问题描述】:
我只是在学习 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
【问题讨论】:
-
这是一个很好的问题,但也很广泛(不是说它不好,只是答案会很长)。这里有两个看起来很有用的链接,可以帮助“缩小”问题:stackoverflow.com/questions/25841712/…、simpleisbetterthancomplex.com/tutorial/2018/01/18/…
-
非常感谢您向我展示了路径。我想检查我是否正确理解。请您查看更新的部分以涵盖我的用例吗?
-
看来您的方向是正确的。 @rydber 的回答也很好。我要更改的一件小事是我将用函数/属性替换布尔字段,检查是否存在相关对象,例如:
def is_job_seeker(self): try: user.jobseeker; except JobSeeker.DoesNotExist: return False; else: return True。通过这种方式,一致性得到了提高,因为存在单一的事实来源(但由于存在数据库查找,性能会降低;这可以通过使用缓存属性来缓解,该属性是它自己的蠕虫罐 :))。但这只是一点点。
标签: python django django-models