2016-05-26 14 views
0

私のレンダリングされたhtmlページには、ノートデータと呼ばれる複数のサムネイルがあります(注:私のモデルはDjangoです)。すべてのサムネイルに「削除」ボタンをバインドすることをお勧めします。ユーザーが「削除」をクリックすると、削除されます。私は(私のviews.pyで)に来て何 :DjangoでボタンとGETリクエストを使用してモデルを削除するには?

ids=[x.id for x in Note.objects.all()] 
    buttons = [] 
    for x in ids: 
     buttons.append('DeleteButton' + str(x)) 
    if (request.GET.get(x for x in buttons)): 
    print("Button click registered @ ", x) 

まあ、それは実際には任意のボタンのクリックを登録していないので、「登録をクリックし、」印刷していません。私のボタンがnotes.htmlで次のようになります。

<input type="submit" class="btn btn-default" value= "DeleteButton" name="DeleteButton{{ Note.id }}"> 

任意のアイデアをどのように私は実際にクリックされた任意のボタンを登録することができますか?前もって感謝します!

答えて

2

request.GET.get(x for x in buttons)あなたの考えはまったくありません。すべてのボタン名のリストからなる単一のパラメーターを取得しようとします。それは決してうまくいかない。

しかし、これはとにかく非常に非効率的なやり方です。すべてのIDを繰り返し、GETに含まれているかどうかを調べるのではなく、がGETにというIDを抽出して抽出するだけです。ような何か:

button_ids = [] 
for item in request.GET: 
    if item.startswith('DeleteButton'): 
     button_ids.append(item.replace('DeleteButton', '')) 
notes = Note.objects.filter(id__in=button_ids) 

より良い方法は、あなたがボタンに表示される内容から値を分割することができます実際のbuttonタグではなくinputを、使用することです。次に、別の値を持つ単一のnameを使用することができます。

<button name="DeleteButton" value="{{ note.id }}"> 
    Delete 
</button> 

は今、あなたは簡単に行うことができます。

button_ids = request.GET.getlist('DeleteButton') 

(IEバージョン8の前にボタン要素を持つさまざまなバグがあったので、あなたがサポートする必要がある場合は、これらの、これは良いアイデアではないことに注意してください。 )

+0

もし私が10000回upvoteすることができたら、私は間違いなく!今すぐDeleteButtonをクリックするたびに、現在のボタンの値をクリックした 'GET'リクエストが表示されます。作品は完璧です。今度は次のように書く必要があります: if(request.GET.get( 'DeleteButton')): 次の質問:GETリクエスト後、オブジェクトとレンダリングページを再度削除します。しかし、このGET要求はまだ私のページアドレスにあります。 DeleteButtonをクリックした後、ページアドレスを強制的にリセットするにはどうすればよいですか? \t \t Note.objects.filter(ID = request.GET.get( 'DeleteButton'))(削除) – Disciples

+0

UPDT:(request.GET.get( 'DeleteButton'))場合だけ を使用out.I考え出し: \t \t Note.objects.filter(id = request.GET.get( 'DeleteButton'))。delete() \t \t returnリダイレクト( '/ notes /') – Disciples

関連する問題