2009-04-15 7 views
37

Ok, quindi ecco il magro:manipolazione dei dati nel pannello di amministrazione di Django su Save

# 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) 

Come potete vedere, sto omettendo il campo autore in forma di amministrazione. Voglio, in qualche modo, riempirlo automaticamente prima che venga salvato. Come posso farlo? Sono stato su Google per l'ultima ora senza alcun risultato.

Grazie in anticipo.

risposta

58

Dal Django Docs:

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

Procedimento save_model è data la HttpRequest, un'istanza modello, un'istanza ModelForm e un valore booleano a seconda se si sta aggiungendo o cambiando l'oggetto. Qui puoi fare qualsiasi operazione di pre o post-salvataggio.

Ad esempio per collegare request.user all'oggetto prima di salvare:

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

come fare operazioni di post-salvataggio? non è indicato nei documenti – samix73

+1

Vecchio commento. Basta rispondere qui per aggiornare SO @ samix73: Idealmente dovresti usare Super per chiamare la classe base save_model e fare il tuo dopo. Pubblicherà lo snippet di codice, se necessario. – 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() 
Problemi correlati