Ваша реализация почти на месте. Не похоже, что вам нужна пользовательская модель прямо сейчас, поэтому я бы просто использовал 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.
Обратите внимание, что я не ссылаюсь User
напрямую . Использование вышеуказанного подхода облегчит вашу жизнь, если вы решите поменять пользовательские модели в будущем.
Я предполагаю, что вы не хотите создавать User
, а затем создать Company
и связать его с этим пользователем - вы просто хотите сделать это за один раз. Это немного другой вопрос, и решение будет заключаться в том, чтобы вы создали регистрационную форму или что-то в этом роде, где вы можете добавить некоторую логику о том, является ли пользователь компанией, рекрутером или соискателем.
Что касается других ваших точек зрения, похоже, вы хотите установить права пользователя. Здесь - это документы для установки разрешений по умолчанию для ваших пользовательских пользователей, а здесь - это общие документы для встроенной системы разрешений Django. Например, модель вашей компании и рекрутера может вернуть True
для has_perm('your_app.add_job')
, в то время как ваша модель Jobseeker вернет False
. То есть Компании и рекрутеры могут создавать рабочие места, но соискатели не могут.
Надеюсь, это поможет!