nekrasov444
@nekrasov444

Как правильно расширить стандартную модель user?

Всем привет! Прошу посмотреть и сказать свое мнение, так делает или нет:

У меня есть 3 типа пользователей (заказчик, рабочий и управляющий)

Я расширяю общею модель AbstractUser, моделью Profile - далее для типов пользователей "заказчик" и "управляющий" этих полей достаточно, но для работника нужны еще поля, по этому я создаю дочерние модели и вешаю их на Profile связью один к одному (Может нужно было прикрепить к user, а не к Profile?)

from django.contrib.auth.models import User
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver


class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    city = models.CharField(max_length=30, blank=True)
    phone = models.CharField(max_length=12, blank=True)
    user_about = models.TextField(blank=True)
    user_worker = models.BooleanField(default=True)


@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)


@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()


class AutoWorker((models.Model):
    Profile = models.OneToOneField(Profile, on_delete=models.CASCADE)


class AboutWorker(models.Model):
    Profile = models.OneToOneField(Profile, on_delete=models.CASCADE)
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
@pyHammer
Ivan Nekrasov для того чтобы разделить пользователей по ролям, вам будет проще сделать так. Важно обратить внимание на то, что лучше делать так при старте разработки проекта или если имеете достаточный опыт, чтобы справится с определенными трудностями на уже рабочем проекте.
Итак, вам нужно расширить модель User и добавить поле role
class User(AbstractUser):
    role = models.CharField(max_length=32, choices=ROLE_CHOICES)

Заменить параметр в settings.py
AUTH_USER_MODEL = 'myapp.User'
Создать и применить миграции.
Далее вы просто в зависимости от того какая роль назначена пользователю проверкой if user.role == ADMIN, реализовываете бизнес логику.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
27 окт. 2020, в 15:42
1000 руб./в час
27 окт. 2020, в 15:30
100000 руб./за проект
27 окт. 2020, в 15:28
100000 руб./за проект