Una mejor manera de importar AUTH_USER_MODEL en Django 1.5

Estoy tratando de hacer que las aplicaciones conectables sean más resistentes en Django 1.5, donde ahora tienes un modelo de usuario definible y personalizado.

Al agregar claves foráneas a un modelo puedo hacer:

user = models.ForeignKey(settings.AUTH_USER_MODEL) 

lo que me ahorra la importación de Usuario en la parte superior del archivo que se rompe cuando django.contrib.auth.models.User ya no es el modelo de usuario. Pero a veces, al realizar pruebas, necesito poder crear un usuario, y lo mejor que he podido encontrar para esto es

 from django.conf import settings from django.db.models import get_model User = get_model(*settings.AUTH_USER_MODEL.split('.')) 

entonces puedo hacer cosas como:

 User.objects.create(username="test") 

dentro de mi prueba (algunos objetos tienen FK vinculados a los usuarios y necesito uno de esos objetos en una prueba).

No me parece particularmente elegante, pero realmente no veo una forma más limpia de hacerlo en 1.5.

¿Me perdí algo en la documentación?

Una forma de hacerlo es:

 try: from django.contrib.auth import get_user_model except ImportError: # django < 1.5 from django.contrib.auth.models import User else: User = get_user_model() 

Solo recuerde, get_user_model no se puede llamar a nivel de módulo . En particular, ni siquiera piense en usarlo en models.py para definir una relación ForeignKey . Use la configuración AUTH_USER_MODEL si tiene que hacerlo.

De lo contrario, como he descubierto, obtendrás errores extraños y difíciles de depurar donde ciertos modelos simplemente no estarán disponibles. De hecho, tuve una situación en la que al agregar print get_user_model() a un determinado archivo se produjo un error en otra importación, en una aplicación de django totalmente diferente.

Si leí esta introducción a get_user_model , podría haberme ahorrado unas horas …