@chevylevel
Java newbee

Как правильно смоделировать таблицу пользователей?

Есть 2 категории пользователей,
"Мастер" и "Заказчик"
если пользователь имеет тип "Мастер", то
у него должно быть свое особое поле, например "Электрик",
а если тип "Заказчик", то, логично, что он этого поля иметь не должен.

На данный момент реализовал так:
USER_CATEGORY = ((1,"Customer"), (2,"Master"))

class UserCategory(models.Model):
    choice=models.IntegerField(choices=USER_CATEGORY, db_index=True)
    def __str__(self):
        return str(self.choice)

class MasterCategory(models.Model):
    category_name=models.CharField(max_length=200, db_index=True, )
    description=models.TextField()
    def __str__(self):
        return self.category_name

class User(models.Model):
    name=models.CharField(max_length=200)
    user_category=models.ForeignKey(UserCategory)
    master_category=models.ForeignKey(MasterCategory, null=True, blank=True)
    def __str__(self):
        return self.name

то есть у меня тут общая таблица для всех, некоторые поля в которой ссылаются на др. таблицы, но
при такой реализации, "Заказчик" все равно может выбрать себе специализацию, предназначенную только для пользователя категории "Мастер".
Подскажите, как сделать эти связи правильно, и еще, ведь куда-то надо определить и админские учетки?
Заранее спасибо!
  • Вопрос задан
  • 222 просмотра
Пригласить эксперта
Ответы на вопрос 1
@bpe
Сделать одну общую АБСТРАКТНУЮ модель в которой будут все ОБЩИЕ для Мастер и Заказчик поля. Затем наследовать от нее таблицу MasterUser и CustomerUser в которых будут уже собственные поля, те которые нужны для конкретного типа пользователей.
Для абстрактной модели не забыть указать:
class Meta:
        abstract = True

И лучше не надо делать модель с именем User.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы