Хотя наилучшей практики не существует, все зависит от того, что вы делаете, наиболее вероятным методом работы является поле type
с указанием Agent
и таблица один-к-одному (документы) для дополнительных полей.
Вы можете создавать записи по мере необходимости. В том, что вы делаете, нет ничего особенного только потому, что это пользователь.
class AgentDetails(Model):
user = OneToOneField(User, primary_key=True, on_delete=CASCADE)
...
Более полная модель пользователя будет выглядеть примерно так:
class User(AbstractBaseUser, PermissionsMixin):
USERNAME_FIELD = 'email'
EMAIL_FIELD = 'email'
REQUIRED_FIELDS = ["name"]
email = EmailField(unique=True, db_index=True)
name = CharField(max_length=100)
type = ChoiceField(choices=[('user','User'),('agent','Agent')])
is_staff = models.BooleanField(default=False, help_text='If the user can log into this admin site.')
is_active = models.BooleanField(default=True, help_text='If the user is active, instead of deleting')
created_at = models.DateTimeField('Date Joined', default=timezone.now)
objects = MyUserManager() #
Кроме того, вам, вероятно, понадобится добавить:
- Пользовательскую страницу администратора
- Пользовательский UserManager
Вы можете получить одну таблицу из абстрактная база, но это сгенерирует 1 таблицу для каждого типа пользователя, которая не будет работать со стандартной аутентификацией. Для получения информации см. Django Наследование модели .
class User(Model):
email = EmailField()
class Meta:
abstract = True
class Agent(User): # generates table 1
extra_field = CharField()
class Standard(User): # generates table 2
extra_field = CharField()
Если указанная вами пользовательская модель завершена, то я не думаю, что она будет работать со значением по умолчанию django инфраструктура. Из вашего вопроса не ясно, нужна ли вам помощь по этому вопросу.