Django несколько профилей пользователей / субпрофилей - PullRequest
4 голосов
/ 06 сентября 2011

Я пытаюсь создать интранет / экстрасеть с внутренними / внешними пользовательскими профилями с общим общим профилем.Я просмотрел несколько ответов на этом сайте, но ни один из них не касается конкретно того, что я собираюсь сделать.Ниже приведены (урезанные) файлы, которые у меня есть.

Как лучше всего создать модель профиля с подпрофилями для каждого типа пользователя?Я пытаюсь не требовать пользовательской аутентификации, если это вообще возможно.

https://gist.github.com/1196077

Ответы [ 3 ]

9 голосов
/ 22 ноября 2012

У меня есть решение, которого я не знаю. Лучшее ли оно, но вижу его

models.py

from django.db import models
from django.contrib.auth.models import User

class Pollster(models.Model):
    """docstring for Polister"""
    user   = models.OneToOneField(User, related_name = 'polister', unique=True)
    cedule = models.CharField( max_length = 100 ) 

class Respondent(models.Model):
    """ """
    born_date   = models.DateField( verbose_name=u'fecha de nacimiento' )
    cedule      = models.CharField( max_length = 100, verbose_name=u'cedula' ) 
    comunity    = models.CharField( max_length = 100, verbose_name=u'comunidad')
    phone       = models.CharField( max_length = 50, verbose_name=u'telefono')
    sanrelation = models.TextField( verbose_name =u'Relacion con SAN')
    user        = models.OneToOneField( User, related_name = 'respondent')

Я создаю MiddleWare: так

я создаю middleware.py

from django.contrib.auth.models import User
from encuestas.models import Pollster, Respondent

class RequestMiddleWare(object):
    """docstring for """
    def process_request(self,request):
        if isPollster(request.user):
            request.user.userprofile = Pollster.objects.get( user = request.user.id)
        elif isRespondent(request.user):
            request.user.userprofile = Respondent.objects.get(user = request.user.id)   
        return None   

def isPollster(user):
    return Pollster.objects.filter(user=user.id).exists()

def isRespondent(user):
    return Respondent.objects.filter(user=user.id).exists()

и вам нужно настроить settings.py для промежуточного программного обеспечения: добавить к атрибуту MIDDLEWARE_CLASSES:

'encuestas.middleware.RequestMiddleWare'

encuestas - это имя my_app middleware - это файл Middleware RequestMiddleWare - это класс промежуточного программного обеспечения

4 голосов
/ 06 сентября 2011

Вам нужна комбинация для хранения дополнительной информации о пользователях и наследовании модели .

По сути, вам понадобятся универсальные User модели, которые мы все знаеми любить, или ненавидеть, и тогда вам нужна общая модель профиля, которая является вашей AUTH_PROFILE_MODULE настройкой.

Эта модель профиля будет моделью верхнего уровня с подклассами модели для внутренних и внешних пользователей.Вы , вероятно, не хотите иметь абстрактную модель в этом случае, поскольку вам понадобится общая таблица профилей для загрузки профилей пользователей с помощью User.get_profile().

Так что ... я думаю, чтоглавное, что вы хотите изменить, - это сделать так, чтобы ваши ассоциированные, внешние и т. д. модели наследовали от вашей модели профиля.

0 голосов
/ 28 марта 2012

Пожалуйста, ознакомьтесь с этой замечательной статьей, в которой описано, как наследовать от класса User, и добавьте свою собственную информацию По крайней мере, для меня это, кажется, правильный путь: http://scottbarnham.com/blog/2008/08/21/extending-the-django-user-model-with-inheritance/

Используя этот метод, можно легко добавить несколько пользовательских типов в свое приложение Django.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...