2009-04-15 3 views
37

Ok, alors voici le maigre:dans la manipulation des données panneau d'administration de Django sur Enregistrer

# models.py 
class Article(models.Model): 
    title   = models.CharField(max_length = 255) 
    author   = models.ForeignKey(User) 
    published_at = models.DateTimeField(auto_now_add = True) 
    body   = models.TextField() 

    def __unicode__(self): 
     return self.title 

# admin.py 
from hpccoe.news.models import Article 
from django.contrib import admin 
from django import forms 
from django.forms import widgets 

class ArticleAdminForm(forms.ModelForm):  
    title = forms.CharField(max_length = 255, required = True) 
    body = forms.CharField(required = True, widget = widgets.Textarea) 

class ArticleAdmin(admin.ModelAdmin): 
    fields = [ 'title', 'body' ] 
    form = ArticleAdminForm 

admin.site.register(Article, ArticleAdmin) 

Comme vous pouvez le voir, j'omettre le champ auteur sous la forme d'administration. Je veux, d'une manière ou d'une autre, le remplir automatiquement avant de l'enregistrer. Comment puis-je y arriver? J'ai été sur Google pour la dernière heure en vain.

Merci d'avance.

Répondre

58

De l'Django Docs:

ModelAdmin.save_model(self, request, obj, form, change) 

Le procédé save_model reçoit le HttpRequest, une instance de modèle, un exemple ModelForm et une valeur booléenne indiquant si elle est l'ajout ou la modification de l'objet. Ici, vous pouvez effectuer des opérations avant ou après la sauvegarde.

Par exemple, pour attacher request.user à l'objet avant d'enregistrer:

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

comment effectuer des opérations de post-enregistrement? il n'est pas indiqué dans les docs – samix73

+1

Ancien commentaire. Il suffit de répondre ici pour mettre à jour SO @ samix73: Idéalement, vous devriez utiliser Super pour appeler la classe de base save_model et faire votre après. Va poster un extrait de code si nécessaire. – Shrey

15
class ArticleAdmin(admin.ModelAdmin): 
    fields = [ 'title', 'body' ] 
    form = ArticleAdminForm 

    def save_model(self, request, obj, form, change): 
     obj.author = "name Here" 
     obj.save() 
Questions connexes