Не совсем ответ на ваш вопрос, но почему бы не использовать профиль пользователя для определения ваших type
и других данных, специфичных для классов UserX
?Они просты в настройке, позволяют хранить дополнительную информацию о пользователе и позволяют продолжать использовать встроенные User
объекты.
Классы профиля довольно просты (я поднял это из Книга Джанго, глава 12 ):
class MySiteProfile(models.Model):
# This is the only required field
user = models.ForeignKey(User, unique=True)
# The rest is completely up to you...
type = models.CharField(maxlength=100, blank=True)
Помимо этого, вы переходите на элемент в settings.py
и установите триггер для автоматического создания профиля при создании User
, и все готово.
Ваш результирующий код представления также будет значительно упрощен:
def login_attempt(request):
user = request.user
data = {}
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
type = user.get_profile().type
return render_to_response (
"templates/success_"+type+".html",
data,
context_instance=RequestContext(request)
)
else:
return render_to_response (
"templates/fail1.html",
data,
context_instance=RequestContext(request)
)
else:
return render_to_response (
"templates/fail2.html",
data,
context_instance=RequestContext(request)
)