from django.contrib.auth.models import User
class UserProfile(models.Model):
    ROLE_CHOICES = (
        ('A', 'Administrator'),
        ('M', 'Manager'),
        ('C', 'Client'),
    )
user = models.OneToOneField(User)
role = models.CharField(max_length=1, choices=ROLE_CHOICES)
# Здесь поля для всех трёх типов
Но в этом случае стоит ещё сделать валидацию — чтобы для
администратора, например, не заполнялось поле, которое должно
заполняться только для менеджеров.
В настройках при этом указывается:
AUTH_PROFILE_MODULE = 'accounts.UserProfile'
(Если модель находится в приложении accounts.)
И далее, чтобы получить такой профайл, вы можете получать объект User
и вызывать у него метод get_profile().
2011/11/18 マギクアルセニ <aruseni.magiku@gmail.com>:
> from django.contrib.auth.models import User
>
> class Admin(models.Model):
>    # Обязательное поле
>    user = models.OneToOneField(User)
>
>    # Поля специально для пользователей-администраторов
>    accepted_eula = models.BooleanField()
>    favorite_animal = models.CharField(max_length=20, default="Dragons.")
>
> Подробнее тут:
> https://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users
>
> Название класса лучше всего делать именно Admin, а не Admins, в
> единственном числе. Это что-то вроде стандарта, и когда Django
> автоматически склоняет названия моделей (хотя это можно и настроить)
> для использования в административном интерфейсе, то предполагает, что
> названия моделей записываются именно в единственном числе.
>
> 2011/11/18 Дмитрий <frantic.rocker@gmail.com>:
>> Здарова мужики! Подскажите, как правильнее создать модели юзеров.
>>
>> Есть три роли - админ, менеджер, клиент. На каждую роль свои поля для
>> заполнения.
>> Я в этом деле дилетант поэтому в голове вырисовывается следующее:
>>
>> class Admins(models.Model):
>> first_name..
>> last_name..
>> login..
>> pass..
>> ...тут одни поля
>>
>> class Managers(models.Model):
>> first_name..
>> last_name..
>> login..
>> pass..
>> ...тут другие
>>
>> class Clients(models.Model):
>> first_name..
>> last_name..
>> login..
>> pass..
>> ...ну вы поняли
>>
>> и все. тут приходит ступор, а как же потом авторизовываться?
>> думаю, прифигачить <select> с выбором роли и там уже механизм более-менее
>> понятен (хотя не факт).
>>
>> Но затем появляется еще одна мысль, а нафига тогда джанговская авторизация?
>> неужели ее нельзя использовать в данном случае?
>>
>> смутно понимаю что пишу но в голове что-то вроде:
>>
>> class Admins(User):
>> тут одни поля
>>
>> class Managers(User):
>> тут другие итд..
>>
>> В общем не судите строго за вероятно неважно поставленную задачу, только с
>> работы, в голове каша.
>>
>>
>>
>
 
Комментариев нет:
Отправить комментарий