Inicialmente, empecé mi uso de perfiles de esta manera:Django - Múltiples perfiles de usuario
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User)
verified = models.BooleanField()
mobile = models.CharField(max_length=32)
def __unicode__(self):
return self.user.email
que funciona muy bien junto con AUTH_PROFILE_MODULE = 'accounts.UserProfile'
set en settings.py
.
Sin embargo, tengo dos tipos diferentes de usuarios en mi sitio web, Individuales y Corporativos, cada uno con sus propios atributos únicos. Por ejemplo, me gustaría que mis usuarios individuales tuvieran un solo usuario, por lo tanto, tenían user = models.OneToOneField(User)
, y para Corporativo me gustaría que tuvieran varios usuarios relacionados con el mismo perfil, por lo que tendría user = models.ForeignKey(User)
en su lugar.
así que pensé en segregar el modelo en dos modelos diferentes, y IndivProfile
CorpProfile
, tanto la herencia de UserProfile
mientras mueve los atributos específicos del modelo en las sub-modelos pertinentes. Me parece una buena idea y probablemente funcione, sin embargo, no podría especificar AUTH_PROFILE_MODULE
de esta manera ya que tengo dos perfiles de usuario que serían diferentes para diferentes usuarios.
También pensé en hacerlo a la inversa, teniendo UserProfile
poder heredar de múltiples clases (modelos), algo como esto:
class UserProfile(IndivProfile, CorpProfile):
# some field
def __unicode__(self):
return self.user.email
De esta manera me gustaría establecer AUTH_PROFILE_MODULE = 'accounts.UserProfile'
y resolver su problema. Pero eso no parece funcionar, ya que la herencia en python funciona de izquierda a derecha y todas las variables en IndivProfile
serán dominantes.
Claro que siempre puedo tener un solo modelo con IndivProfile
y CorpProfile
variables todas mezcladas juntas y luego usaría las necesarias cuando sea necesario. Pero eso simplemente no me parece limpio, preferiría que se segregara y usar el modelo apropiado en el lugar apropiado.
Cualquier sugerencia de limpiar forma de hacer esto?
¿Qué pasa con [herencia] (https://docs.djangoproject.com/en/dev/topics/db/models/#model-inheritance)? – danihp
Podría hacer que 'UserProfile' sea abstracto y permitir que' IndivProfile' y 'CorpProfile' hereden de' UserProfile'. Esto aún no va a resolver el problema con 'AUTH_PROFILE_MODULE'. ¿A cuál va a apuntar? – abstractpaper
¿Qué le parece agregar campos corporativos + individuales + tipo de cuenta a un modelo? Creo que podría estar bien si solo tienes dos tipos, pero puede ser malo si tienes más de 2 o esos perfiles son muy diferentes. –