Ho lo stesso enigma di presented in this question, ma applicato all'author.User di Django.Come convertire request.user in un proxy auth.User class?
ho questo modello di delega:
class OrderedUser(User):
def __unicode__(self):
return self.get_full_name()
class Meta:
proxy=True
ordering=["first_name", "last_name"]
E alcuni dei miei altri modelli utilizzano un OrderedUser
invece di un django.contrib.auth.models.User
come tipi di campo.
Nel mio punto di vista ho quindi utilizzare il request.user
per compilare un campo e - come previsto - un errore:
'Cannot assign "<User...>": <field> must be a "OrderedUser" instance'
ho potuto solo fare OrderedUser.objects.get(request.user.id)
, ma questo è un colpo in più per il database.
Quindi, come convertire una classe del modello base nella sua classe proxy?
destro. C'è un meccanismo che non coinvolge un colpo al DB? – cethegeek
Sì, copiare il ditt ha fatto il trucco. Grazie Daniele. – cethegeek
Grazie per questo suggerimento. Una cosa che ho trovato però, quando si utilizza questo in un context_processor per passare un oggetto utente ai template ... devi farlo in modo diverso se l'utente non ha effettuato il login. Come hai fatto, o finisce sempre come un oggetto OrderedUser (discendente dall'utente), ma se l'utente non ha effettuato l'accesso, dovrebbe essere di tipo AnonymousUser. Quindi testerei se 'request.user.is_authenticated()' e se è così, solo allora fare quanto sopra. Altrimenti, fare 'o = request.user'. –