Django: datos del usuario

Django nos ofrece un muy buen sistema de usuarios y ACL ya integrado en su código -builtin-, y no es nada complicado aprovecharlo para nuestras aplicaciones, es más yo diría que es ideal y está pensado para ello.

Si queremos guardar en una tabla el usuario que ha realizado según qué acción, en el modelo hemos de indicarle que habrá un campo con clave foránea a Users de Django (models.py):

class Entry(models.Model):
    title = models.CharField(max_length=200)
    user = models.ForeignKey(User)

Si dejamos el código así, a la hora de crear una nueva Entry desde el admin nos sacará un combo preguntándonos a qué usuario corresponde el registro, pero como lo que queremos es aprovechar la sesión que hemos iniciado -en el admin- para cubrir automáticamente esos datos, tendremos que indicarle -en admin.py-  y a la hora de guardar -save_model- que no queremos cubrir ese campo puesto que hay que cogerlo de la sesión abierta:

class AdminEntries(admin.ModelAdmin):
    exclude = ('user',)

    def save_model(self, request, obj, form, change):
        obj.user = request.user
        obj.save()

Una vez hemos guardado el registro podemos comprobar que efectivamente ha sido así si tenemos el campo user en el list_display del administrador de la clase.

code django

About the author

Óscar
has doubledaddy super powers, father of Hugo and Nico, husband of Marta, *nix user, Djangonaut and open source passionate.