with loginview custom abstractuser python django django-users

python - loginview - login with django user



Cómo usar ''Usuario'' como clave externa en Django 1.5 (2)

Cambia esto:

user = models.ForeignKey(''User'', unique=True)

a esto:

user = models.ForeignKey(User, unique=True)

He hecho un modelo de perfil personalizado que se ve así:

from django.db import models from django.contrib.auth.models import User class UserProfile(models.Model): user = models.ForeignKey(''User'', unique=True) name = models.CharField(max_length=30) occupation = models.CharField(max_length=50) city = models.CharField(max_length=30) province = models.CharField(max_length=50) sex = models.CharField(max_length=1)

Pero cuando ejecuto manage.py syncdb , obtengo:

myapp.userprofile: ''user'' tiene una relación con el modelo User, que no se ha instalado o es abstracto.

También intenté:

from django.contrib.auth.models import BaseUserManager, AbstractUser

Pero da el mismo error. ¿Dónde estoy equivocado y cómo solucionar esto?


Exactamente en Django 1.5, se introdujo la configuración AUTH_USER_MODEL , que permite utilizar un modelo de usuario personalizado con el sistema de autenticación.

Si está escribiendo una aplicación que está diseñada para trabajar con proyectos en Django 1.5 a 1.10 y posteriores, esta es la forma correcta de hacer referencia al modelo de usuario (que ahora puede ser diferente de django.contrib.auth.models.User ):

class UserProfile(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL)

  • Ver docs para más detalles.

En el caso de que también esté escribiendo una aplicación reutilizable compatible con Django 1.4, entonces probablemente debería determinar qué referencia usar al verificar la versión de Django, tal vez así:

import django from django.conf import settings from django.db import models def get_user_model_fk_ref(): if django.VERSION[:2] >= (1, 5): return settings.AUTH_USER_MODEL else: return ''auth.User'' class UserProfile(models.Model): user = models.ForeignKey(get_user_model_fk_ref())