2011-10-26 19 views
6

Me pregunto cuáles son las ideas de las personas sobre unir modelos directamente al objeto auth.User frente al modelo de perfil del usuario.¿Debería ForeignKey para el usuario de Django o un modelo de perfil?

Estoy almacenando algunos tipos diferentes de modelos que mi usuario está agregando en mi aplicación. Los usuarios de la aplicación buscarán otros usuarios a través de los criterios de estos modelos.

Por un lado, estoy pensando que si me unir directamente al usuario no necesitaré hacer request.user.get_profile() cada vez que necesito obtener los registros del usuario, y no lo hago presuponer que un Usuario siempre tiene un perfil (lo hacen en mi aplicación en el momento, pero aún así). Esto deja el modelo de perfil como solo que contiene los detalles de contacto del usuario.

Por otro lado, imagino que lo más probable es que necesite valores del Perfil (por ejemplo, nombre, ubicación) cuando busco estos otros modelos.

Sin duda alguna funcionará, así que tal vez no importe, pero me pregunté qué pensaban los demás.

Gracias!

Ludo.

Respuesta

1

En general: si desea que sus aplicaciones sean reutilizables, siempre cree claves externas para el modelo de Usuario.

Como ya ha dicho, en la mayoría de los casos necesitará una instancia de Usuario y de Perfil, por lo que para evitar consultas de bases de datos múltiples, use la memoria caché.

Si la reutilización no es relevante, cree una clave foránea en Profile y use select_related() para obtener la instancia de User con una sola consulta.

2

También recomendaría la creación de claves foráneas para el modelo de Usuario. Simplemente simplifica tu vida cuando trabajas con el objeto del usuario en la vista, por ejemplo. Por lo tanto, puede hacer cosas como request.user.foo_set, etc. sin tener que pasar por el modelo de perfil.

+0

No lo consideré. Aviso sonoro. – sleblanc

Cuestiones relacionadas