私はdjangoの一括更新機能を開発中です。私は自分のデータベースにデータを表示するテーブルを持っており、ユーザーは編集したいオブジェクトを選択します。選択すると、「一括更新」ボタンがクリックされ、それらがdjango ModelFormに移動します。このページの部分図は、ある:オブジェクト変数をdjangoの 'form.is_valid():'関数に渡します
def BulkUpdate(request):
c = {}
c.update(csrf(request))
if request.method == "POST":
pks = request.POST.getlist("selection")
selected_objects = mymodel.objects.filter(pk__in=pks)
form = BulkUpdateForm(request.POST)
print (selected_objects)
if form.is_valid():
gender = form.data['gender']
print (gender)
print (selected_objects)
return render(request, 'bulkUpdate.html', {'form': form })
最初print (selected_objects)
が正常クエリセットに内前のテンプレートから選択されたすべてのオブジェクトを印刷します。ただし、2番目のprint (selected_objects)
は空のQuerySetを返します。 3つのオブジェクトが選択されている場合たとえば、私の端末は
<QuerySet [<model: model object>, <model: model object>, <model: model object>]>
が印刷されますが、私は私のコードでそれを2回印刷していますので、有効なフォームの送信時にそれが
<QuerySet []> <QuerySet []>
つを印刷します..
私の主な質問は、どのように私のform.is_valid()関数にこれらの3つのオブジェクトを得ることができます。私は変数selected_objects
を両方の呼び出しで同じ方法で印刷したいと思います。助けやアドバイスは素晴らしいです。あなたの時間をありがとう。
それはちょうどそのようにすることはできません。同じクエリーセットを2回印刷すると結果は同じになります。私は 'form.is_valid()'がFalseで、あなたのコードのどこかにもう2枚の印刷物があると確信しています。 – Raz
残念ながら、そうではありません。私はそうだった。私はジェンダーの入力が返されたので、関数が呼び出されていることを知っています。最初は一括更新ボタンを押してフォームページに移動したときにオブジェクトを取得しますが、フォームを送信すると選択されたオブジェクトにアクセスできなくなったと思いますか?空のクエリーセットを返します。多分トークンを使うことを考えていたのですか?しかし、私はトークンの経験があまりなく、それが安全な方法であるかどうかは分かりません。 – Ozie
'print(pks)'の値は何ですか?空のリストの場合は、フォームを送信するときにPOSTデータに 'selection'を含めません。 – Alasdair