Как создать отдельную модель (таблицу) для пользователя-администратора и обычного пользователя в Django

#python #django #django-models #django-rest-framework #django-admin

#python #django #django-модели #django-rest-framework #django-admin

Вопрос:

Я просто хочу отдельную таблицу для обычного пользователя и пользователя-администратора.

Комментарии:

1. Зачем это нужно? Это еще больше усложнило бы систему аутентификации и т.д.

2. Просто чтобы игнорировать некоторые ненужные поля. Это требование для моего проекта. Есть какие-либо обходные пути?

Ответ №1:

Я согласен с комментарием Уиллема, но вы можете попробовать несколько разных шаблонов:

 class BaseUser(AbstractBaseUser...):

    ''' base user class '''

    first_name = models.CharField(...)
    last_name = models.CharField(...)

    @property
    def is_normal_user(self):
        try:
            return self.normal_user and True
        except:
            return False

    @property
    def is_admin_user(self):
        try:
             return self.admin_user and True
        except:
             return False
    

class NormalUser(models.Model, ...):

    ''' normal user, extends BaseUser class '''

    base_user = models.OneToOneField('BaseUser', related_name='normal_user', ...)
    email = models.CharField(...)
        

class AdminUser(models.Model, ...):

    ''' admin user, extends BaseUser class '''

    base_user = models.OneToOneField('BaseUser', related_name='admin_user', ...)
    email = models.CharField(...)
    
 

Тогда вы можете сделать что-то подобное в своих представлениях:

 user = BaseUser.objects.get(id=<the user id>)

if user.is_normal_user:
    
    # do something for normal users:

if user.is_admin_user:

    # do something for admin users: