django, как использовать AUTH_PROFILE_MODULE с несколькими профилями? - PullRequest
2 голосов
/ 09 февраля 2011

Предполагая, что у меня разные профили для разных типов пользователей - сотрудников, преподавателей, студентов:

Как мне указать AUTH_PROFILE_MODULE, чтобы получить соответствующий профиль с get_profile?

Ответы [ 2 ]

2 голосов
/ 09 февраля 2011

Нет способа сделать это, но вы можете использовать общий ключ.

from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType

class UserProfileOne(models.Model):
    pass

class UserProfileTwo(models.Model):
    pass


class UserProfile(models.Model):
    content_type    = models.ForeignKey(ContentType)
    object_id       = models.PositiveIntegerField(db_index=True)
    content_object  = generic.GenericForeignKey('content_type', 'object_id')

Пример:

UserProfile.objects.create(content_object=any_profile_instance)

User(pk=1).get_profile().content_object.some_special_field

Если бы вы могли предоставить больше информации, когда можно было бы найти лучшее решение:)

0 голосов
/ 11 февраля 2011

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

Я бы предложил использовать UserProfile с общим внешним ключом или полностью отказаться от UserProfile и создать отдельные модели с внешним ключом пользователя.,

Если к этим дополнительным профилям пользователей будет прикреплено много данных, я бы оставил их в моделях отдельно от UserProfile.Мое личное мнение о UserProfile состоит в том, что он может быстро стать местом сброса пользовательских данных, у которых нет хорошего дома.

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

...