Django Модель пользователя (сотрудник и клиент)
В настоящее время я работаю над системой доставки мобильных приложений, которая предполагает два типа пользователей: "Сотрудник" и "Клиент". Каждый тип пользователей будет иметь различные представления и разрешения в приложении. Кроме того, каждый тип пользователей будет иметь свой собственный "профиль", если хотите. Профиль сотрудника в основном предназначен только для обозначения ролей компании. Профиль клиента в основном используется для сохранения адреса для доставки.
Я пытаюсь узнать мнения о том, что лучше всего использовать для достижения чего-то подобного. Я не могу решить, что лучше использовать - AbstractBaseUser или AbstractUser.
Ниже показаны модели, которые я хочу создать, а также их взаимоотношения:
Ниже приведен файл user/models.py, который я смоделировал:
class UserTypes(models.Model):
type = models.CharField(max_length=100)
def __str__(self):
return self.type
class User(AbstractBaseUser):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
email = models.EmailField()
phone_number = models.CharField(max_length=20)
is_employee = models.BooleanField(default=False)
is_customer = models.BooleanField(default=False)
def __str__(self):
return f'{self.first_name} {self.last_name}'
# if user.is_employee == True
class EmployeeProfile(models.Model):
EMPLOYEE_ROLES = (
('Driver', 'driver'),
('Production', 'production'),
('Manager', 'manager')
)
user = models.OneToOneField(User, on_delete=models.CASCADE)
role = models.CharField(max_length=12, choices=EMPLOYEE_ROLES)
def __str__(self):
return self.user
# if user.is_customer == True
class CustomerProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
company = models.CharField(max_length=100)
address = models.CharField(max_length=100)
address_2 = models.CharField(max_length=100)
city = models.CharField(max_length=50)
state = models.CharField(max_length=2, help_text="State Abbreviation (ex: OH)")
zipcode = models.CharField(max_length=5)
def __str__(self):
return self.user
Я знаю, что мне также нужно использовать сигналы Django или что-то подобное для создания профиля пользователя (для сотрудника или клиента, при создании пользователя).
Заранее спасибо!
Ваш код работает Но согласно стандартам паттерна проектирования, можно сказать, что в пользователя с именем is_employee нужно поместить поле Boolianfield, а вся информация обоих типов пользователей должна быть в AbstractUser, но со значениями null=True и blank=True. Таким образом, у вас будет один пользователь, которого можно разделить полем is_employee. Надеюсь, это было полезно