web-dev-qa-db-fra.com

Manipulation des données dans le panneau d'administration de Django lors de l'enregistrement

Ok, alors voici le skinny:

# 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'omets le champ auteur dans le formulaire d'administration. Je veux, d'une manière ou d'une autre, remplir automatiquement ce document avant qu'il ne soit enregistré. Comment y parvenir? Je suis sur Google depuis une heure en vain.

Merci d'avance.

43

À partir de Django Docs :

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

Le save_model la méthode reçoit la HttpRequest, une instance de modèle, une instance ModelForm et une valeur booléenne selon qu'elle ajoute ou modifie l'objet. Ici, vous pouvez effectuer toutes les opérations de pré ou post-enregistrement.

Par exemple pour attacher request.user à l'objet avant l'enregistrement:

class ArticleAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        obj.user = request.user
        obj.save()
66
Jonathan Lukens
class ArticleAdmin( admin.ModelAdmin ):
    fields  = [ 'title', 'body' ]
    form    = ArticleAdminForm

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