2009-04-15 20 views
37

Ok, więc tutaj jest chudy:manipulowania danymi w panelu administracyjnym Django przy zapisywaniu

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

Jak widać, jestem pomijając polu Autor w formie administracyjnej. Chcę, w jakiś sposób, automatycznie wypełnić to, zanim zostanie zapisane. Jak mogę to zrobić? Byłem w Google przez ostatnią godzinę, bezskutecznie.

Z góry dziękuję.

Odpowiedz

58

Z Django Docs:

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

Sposób save_model dokonaniem HttpRequest, instancja modelu, ModelForm instancji i wartość logiczna na podstawie tego, czy jest dodanie lub zmianę obiektu. Tutaj możesz wykonać dowolne operacje przed lub po zapisie.

Na przykład, aby dołączyć request.user do obiektu przed zapisaniem:

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

jak to zrobić po operacji składowania? nie jest to określone w dokumencie – samix73

+1

Stary komentarz. Po prostu odpisz tutaj, aby zaktualizować SO @ samix73: Najlepiej użyć Super, aby wywołać klasę podstawową save_model i zrobić po niej. W razie potrzeby wstawi fragment kodu. – 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() 
Powiązane problemy