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())