web-dev-qa-db-ja.com

保存時にDjangoの管理パネルでデータを操作する

わかりましたので、ここに細いです:

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

ご覧のとおり、管理者フォームの作成者フィールドは省略しています。保存する前に、どういうわけかこれを自動入力したい。どうすれば実現できますか?私はこの1時間グーグルにいて無駄に終わった。

前もって感謝します。

43

Django Docs から:

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

save_modelメソッドには、HttpRequest、モデルインスタンス、ModelFormインスタンス、およびオブジェクトを追加するか変更するかに基づいてブール値が与えられます。ここでは、保存前または保存後の操作を実行できます。

たとえば、request.user保存する前にオブジェクトに:

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