2009-04-15 19 views
37

Ok, así que aquí está el flaco:manipulación de datos en el panel de administración de Django en Guardar

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

Como se puede ver, estoy omitiendo el campo de autor en la forma de administración. Quiero, de alguna manera, autocompletar esto antes de que se guarde. ¿Cómo hago que eso suceda? He estado en Google durante la última hora en vano.

Gracias de antemano.

Respuesta

58

Desde el Django Docs:

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

se le da la HttpRequest, una instancia de modelo El método save_model, una instancia de ModelForm y un valor booleano en función de si se está añadiendo o cambiando el objeto. Aquí puede hacer cualquier operación previa o posterior a la grabación.

Por ejemplo para adjuntar request.user al objeto antes de guardar:

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

cómo hacer post-guardar las operaciones? no se indica en el documento – samix73

+1

Comentario anterior. Solo respondiendo aquí para actualizar SO @ samix73: lo ideal es que uses Super para llamar a la clase base save_model y lo hagas después. Se publicará fragmento de código si es necesario. – 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() 
Cuestiones relacionadas