пятница, 18 ноября 2011 г.

Re: три роли три класса или три роли один класс с наследованием

Возможно, вам будет удобнее сделать даже так

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):
>> тут другие итд..
>>
>> В общем не судите строго за вероятно неважно поставленную задачу, только с
>> работы, в голове каша.
>>
>>
>>
>

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

Отправить комментарий