2

フォームとブートストラップを使用してフロントエンドからオブジェクトを削除する方法を実装しようとしています。アラート ボックスは閉じていますが、ページを更新すると、オブジェクトはまだ存在し、データベースで削除されません。

これを実装する適切な方法は何ですか?助けてください!

フォーム.py

 class DeleteAlertForm(forms.ModelForm):
      def is_valid(self):
        form = super(DeleteAlertForm, self).is_valid()
        for f, error in self.errors.iteritems():
          if f != '__all__':
            self.fields[f].widget.attrs.update({'class': 'error', 'value': strip_tags(error)})
        return form

  class Meta:  
    model = Alert
    fields = []

ビュー.py

@login_required
def delete(request, alert_id):
  if request.method == "POST":
    form = DeleteAlertForm(request.POST)
    if form.is_valid(): # checks CSRF
      a_id = request.POST.get('alert_id', False)
      alert = New.objects.get(pk=a_id)
      alert.delete()
      return HttpResponseRedirect("/")
  else:
    return redirect('/')
  return redirect('/')

template.html

<div class="alert alert-info alert-block">
<form action="/delete/" method="post">
{% csrf_token %}
<input type="hidden" value="{{alert.id}}" name="alert_id">
<button type="submit" class="close" data-dismiss="alert">×</button>
</form>
</div>

urls.py

url(r'^$/(?P<pk>\d+)/delete$', login_required(DeleteView.as_view(
model=Alert,
success_url='/',
template_name='portal/alert_confirm_delete.html',))),
4

2 に答える 2

2

DeleteViewの使用を検討しましたか?

このために URL を実装する方法は次のとおりです。

    url(r'^mymodel/(?P<pk>\d+)/delete/$', login_required(DeleteView.as_view(
        model=MyModel,
        success_url="/mymodel/deleted/",
        template_name="myapp/mymodel_confirm_delete.html",
    ))),

削除できるようにするモデルごとに、同様のものを実装する必要があります。ただし、必要な他のコードは、urls.pyDeleteView をインポートすることだけです。ただし、すべてのモデルに同じテンプレートと成功 URL を使用できます。

于 2013-08-31T10:45:47.983 に答える