Я только изучаю Django, поэтому я подумал о создании проекта под названием доска объявлений, чтобы понять больше деталей. Я нарисовал следующий вариант использования.
- Люди могут зарегистрироваться в качестве соискателей, создавать свои профили и искать работу, соответствующую их навыкам.
- Компании могут регистрироваться, размещать вакансии.
- Несколько представителей компании должны иметь возможность регистрироваться и размещать вакансии.
- Независимый рекрутер также может создать учетную запись.
- Компания может связаться с этим независимым рекрутером.
Каким будет дизайн модели для такого варианта использования? Меня смущают несколько типов пользователей в 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
def is_job_seeker(self): try: user.jobseeker; except JobSeeker.DoesNotExist: return False; else: return True
. Таким образом улучшается согласованность, так как есть единственный источник правды (но производительность ниже, так как есть поиск в БД; это можно смягчить, используя кешированное свойство, которое является его собственным червем :)). Но это просто нит. - person Tomasz Zieliński   schedule 10.06.2019