22

たとえば(そうではありませんが、説明のために)選択したアイテムの特定のフィールドをXに設定するアクションを追加したい場合。ハードコードではなく、Xを入力できるようにするアクションを追加することはできますか?

4

2 に答える 2

19

参照:中間ページを提供するアクション

チェンジリストページから直接実行することはできませんが、中間ページに、ユーザーが値を入力し、その値をアクションに使用できるフォームを作成できます。

于 2012-08-01T17:53:39.933 に答える
10

少しハックですが、Django1.5で可能です。他の古いバージョンのDjangoでそれが可能かどうかはわかりません。

独自のModelAdminサブクラスを作成します。ModelAdminには、チェンジリストページのボタンaction_formの前に表示されるフォームを決定するという属性があります。Go独自のフォームを作成し、ModelAdminサブクラスでaction_formとして設定できます。

from django import forms
from django.contrib.admin.helpers import ActionForm
# ActionForm is the default form used by Django
# You can extend this class

class XForm(ActionForm):
    x_field = forms.CharField()
    

class YourModelAdmin(admin.ModelAdmin):
    action_form = XForm

これらの変更により、CharFieldに値を設定できる、が作成されますX

そしてx_field、アクション関数で使用します。

def set_x_on_objects(modeladmin, request, queryset):
    for obj in queryset:
        obj.something = request.POST['x_field']
    # do whatever else you want

class YourModelAdmin(admin.ModelAdmin):
    action_form = XForm
    actions = [set_x_on_objects]
于 2014-08-01T12:13:35.643 に答える