2009-05-13 2 views
4

Je voudrais être en mesure d'inclure une référence à l'utilisateur actuellement authentifié avec une note lorsque vous travaillez avec Notes à partir de l'interface d'administration. Le modèle ressemblerait à quelque chose comme:Un modèle Django peut-il automatiquement renseigner l'utilisateur authentifié actuel à partir de l'interface d'administration?

from django.db import models 
from django.contrib.auth.models import User 
from datetime import datetime 



class Note(models.Model): 
    datetime = models.DateTimeField(default=datetime.now) 
    author = models.ForeignKey(User, default=authenticated_user) 
    note  = models.TextField() 

    def __unicode__(self): 
     return unicode(self.author) + u' - ' + unicode(self.datetime) 

Le seul champ que l'utilisateur devrait voir est le champ de texte de note. Le datetime et l'auteur doivent être remplis automagiquement par le modèle, l'interface d'administration ou autre. Cela peut-il être fait? Quelqu'un at-il un exemple de code?

Merci!

Répondre

4

Le réglage de la date peut être pris en compte en spécifiant auto_now_add=True à la définition du champ datetime.

Pour définir l'utilisateur lors de l'enregistrement dans l'admin, faire dans votre classe admin:

class NoteAdmin(admin.ModelAdmin): 
    ...usual admin options... 

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

Cela devrait fonctionner, mais si vous vouliez montrer le champ utilisateur sous la forme avant de l'enregistrer? – user27478

+0

Voulez-vous vraiment afficher un champ * editable * pour l'utilisateur? C'est une clé étrangère, alors voulez-vous une boîte de sélection avec tous les utilisateurs disponibles, mais l'actuelle pré-sélectionnée? Si oui, je suppose que vous pourriez essayer de surcharger add_view sur votre classe ModelAdmin pour passer un champ initial supplémentaire - jetez un oeil à django.contrib.admin.options pour le code. Si vous souhaitez simplement * afficher * le nom d'utilisateur, vous pouvez le faire dans le modèle en utilisant {{request.user}}. –

Questions connexes