2009-09-25 23 views

Respuesta

98

¿Dónde necesita conocer al usuario?

En views El usuario esta proporcionado en la solicitud como request.user.

Porque en plantillas ven here

Si desea guardar el creador o editor de ejemplo de un modelo que puede hacer algo así como la manipulación de usuario:

model.py

class Article(models.Model): 
    created_by = models.ForeignKey(User, related_name='created_by') 
    created_on = models.DateTimeField(auto_now_add = True) 
    edited_by = models.ForeignKey(User, related_name='edited_by') 
    edited_on = models.DateTimeField(auto_now = True) 
    published = models.BooleanField(default=None) 

admin.py

He encontrado esto en Internet, pero no sé donde más

+4

Solo una nota, en save_formset -> set_user, debería ser si no hasattr (instancia, 'created_by') – FurtiveFelon

+0

¿puedo obtener el usuario actual en settings.py? – Mahendra

+0

¿Por qué harías eso? (por favor crea una nueva pregunta, mis días django se han ido) – vikingosegundo

5

La extensión de la respuesta de @ vikingosegundo, si desea obtener el nombre de usuario en el interior de los modelos, he encontrado una manera que implica la declaración de un middleware. Crear un archivo llamado get_username.py dentro de su aplicación, con el siguiente contenido:

from threading import current_thread 

_requests = {} 

def get_username(): 
    t = current_thread() 
    if t not in _requests: 
     return None 
    return _requests[t] 

class RequestMiddleware(object): 
    def process_request(self, request): 
     _requests[current_thread()] = request 

Editar su settings.py y añadirlo a la MIDDLEWARE_CLASSES:

MIDDLEWARE_CLASSES = (
    ... 
    'yourapp.get_username.RequestMiddleware', 
) 

Ahora, en su método save(), se puede obtener el nombre de usuario actual de esta manera:

from get_username import get_username 

... 

def save(self, *args, **kwargs): 
    req = get_username() 
    print "Your username is: %s" % (req.user) 
+0

Hilo dedicado: http://stackoverflow.com/questions/10991460/django-get-current-user-in-model-save –

+0

@nKn es el realmente dedicado MiddleWare es necesario para invocar 'get_username()' en el objeto 'Models' Si es así, sería bueno tener un enlace a un documento canónico sobre eso. ¿Hay funciones de django nativas actualizadas en 1.9.5 para hacer lo mismo? – alvas

3

Django 1.9.6 proyecto predeterminado tiene user en las plantillas predeterminadas

para que pueda escribir cosas como esta directamente:

{% if user.is_authenticated %} 
    {{ user.username }} 
{% else %} 
    Not logged in. 
{% endif %} 

Esta funcionalidad es proporcionada por el procesador django.contrib.auth.context_processors.auth contexto en settings.py.

Dedicado pregunta plantilla: How to access the user profile in a Django template?

Cuestiones relacionadas