Tengo el mismo enigma como presented in this question, pero aplicado al usuario de autenticación de Django.Cómo convertir request.user en una autenticación de proxy. Clase de usuario?
que tienen este modelo de poder:
class OrderedUser(User):
def __unicode__(self):
return self.get_full_name()
class Meta:
proxy=True
ordering=["first_name", "last_name"]
Y algunos de mis otros modelos utilizan un OrderedUser
en lugar de un django.contrib.auth.models.User
como tipos de campo.
En mi punto de vista entonces utilice el request.user
para poblar un campo y - como se esperaba - obtener un error:
'Cannot assign "<User...>": <field> must be a "OrderedUser" instance'
tan sólo pudiera hacer OrderedUser.objects.get(request.user.id)
, pero eso es un golpe extra a la base de datos.
Entonces, ¿cómo convertir una clase de modelo base en su clase de proxy?
derecho. ¿Hay algún mecanismo que no implique un golpe al DB? – cethegeek
Sí, copiar el dict hizo el truco. Gracias Daniel. – cethegeek
Gracias por este consejo. Sin embargo, una cosa que he encontrado es que al usar esto en un contexto_conceso para pasar un objeto de usuario a las plantillas ... debes hacerlo de manera diferente si el usuario no ha iniciado sesión. Como lo tienes, o siempre termina como un objeto OrderedUser (desciende del usuario), pero si el usuario no ha iniciado sesión, debe ser del tipo AnonymousUser. Entonces probaría si 'request.user.is_authenticated()' y si es así, solo entonces haz lo anterior. De lo contrario, haz 'o = request.user'. –