Django 1.5 + relación de modelo de usuario

Django 1.5+ nos permite agregar campos personalizados a un usuario. Quiero usar este hecho, pero no necesariamente sé qué es una buena práctica. Aquí hay una situación en la que estoy confundido sobre cómo manejar los modelos.

Dada la opción de agregar campos al User , si un proyecto solo tiene un tipo de User , digamos un modelo de Student , ¿puedo simplemente agregar campos específicos del estudiante al User ? Soy nuevo en Django, pero creo que la alternativa sería establecer la configuración general del User y crear un modelo de Student , y un campo único de uno a uno en el que se llama usuario.

¿Debería expandir los campos de un User Django para imitar el de un modelo, incluso si se garantiza que el proyecto solo tendrá un tipo de usuario?

Related of "Django 1.5 + relación de modelo de usuario"

Si solo tiene un tipo de usuario y está utilizando Django 1.5+, le recomiendo que aproveche el nuevo AbstractUser. Extendiendo el usuario por defecto de Django

Como ejemplo donde desea agregar la fecha de nacimiento y el color favorito:

 #myusers/models.py from django.contrib.auth.models import AbstractUser from django.db import models class MyUser(AbstractUser): dob = models.DateField() favorite_color = models.CharField(max_length=32, default='Blue') 

Si necesita más flexibilidad, puede extender AbstractBaseUser en lugar de AbstractUser, pero para la mayoría de los casos básicos solo debería necesitar AbstractUser.

También tenga en cuenta que, en cualquier caso, deberá hacer referencia a su modelo de usuario utilizando la configuración . AUTH_USER_MODEL .

Usar el ejemplo anterior y asumir que la aplicación en la que se definió se llama myusers :

 #settings.py AUTH_USER_MODEL = 'myusers.MyUser' 

El método que menciona para crear un modelo de Estudiante con un campo de uno a uno en el modelo de Usuario aún funciona, pero no es tan limpio (aún hay casos en los que tiene sentido si tiene varios tipos de usuarios).

Normalmente no me gusta hacer referencia a los libros en las respuestas, pero descubrí que el Capítulo 16 del Modelo de Usuario de Two Scoops of Django dio una explicación mucho más clara de dónde son apropiadas las diferentes opciones que la versión actual de los documentos en línea de Django. El libro es en general una introducción muy útil para Django y fue escrito en base a 1.5. Sin embargo, tendrías que comprar el libro o encontrar a alguien que lo tenga … (FYI: No obtengo ningún dinero en recomendar esto).

También puede consultar esta pregunta / respuesta de SO: https://stackoverflow.com/a/14104748/307293

No debe tocar el Modelo de User contribuido por django (desde el marco de autenticación). Esto interrumpirá las actualizaciones y usted no sabe qué otras consecuencias podría tener.

Hay dos formas básicas de hacer esto:

  1. Si solo necesita almacenar información adicional sobre un usuario, pero no necesita cambiar el funcionamiento del mecanismo de autenticación / autorización, cree un modelo y agregue un OneToOneField al modelo de User . En este modelo, almacene cualquier otra información diversa.

  2. Si desea cambiar cómo funciona la autenticación, puede crear su propio modelo de User y hacer que django use eso (solo 1.5+).