フォームについて説明します。
class ChangeCategoryForm(forms.Form): _selected_action = forms.CharField(widget=forms.MultipleHiddenInput) category = forms.ModelChoiceField(queryset=Category.objects.all(), label=u' ')
神秘的なフィールド_select_action 、はい? 選択した要素のIDがあります。 DjangoはPOSTリクエストからそれらを選択し、アクションを実行するQuerysetにします(以下のコードを参照)。
私たちの行動は常に方法です。 move_to_categoryと呼びましょう。
def move_to_category(modeladmin, request, queryset): form = None if 'apply' in request.POST: form = ChangeCategoryForm(request.POST) if form.is_valid(): category = form.cleaned_data['category'] count = 0 for item in queryset: item.category = category item.save() count += 1 modeladmin.message_user(request, " %s %d ." % (category, count)) return HttpResponseRedirect(request.get_full_path()) if not form: form = ChangeCategoryForm(initial={'_selected_action': request.POST.getlist(admin.ACTION_CHECKBOX_NAME)}) return render(request, 'catalog/move_to_category.html', {'items': queryset,'form': form, 'title':u' '}) move_to_category.short_description = u" "
ProductAdminクラスでアクションを宣言します。
actions = [move_to_category,]
そして、すべてを表示するテンプレートを作成します
{% extends "admin/base_site.html" %} {% block content %} <form action="" method="post">{% csrf_token %} {{ form }} <p> :</p> <ul>{{ items|unordered_list }}</ul> <input type="hidden" name="action" value="move_to_category" /> <input type="submit" name="apply" value="" /> </form> {% endblock %}
それだけです。 このようにして、非常に多くのあらゆる種類の重要で、必要で、興味深いことができます。
最後に、すべての仕組みを示す作業中のドラフトのスクリーンショットを提供したいと思います。




頑張って