私はtodoアプリケーションを作成しようとしています。このフォームに "todo"を追加できるテーブルがあるフォームがあります。クリックしてオブジェクトを削除する
ユーザを別のページにリダイレクトせずにボタンをクリックすることで、追加された "todo"をデータベースから削除したいと思います.Djangoでこれを行う方法はありますか?
http://postimg.org/image/8dpe1dcob/
Views.py
from django.shortcuts import render
from django.utils import timezone
from .models import Task
from .forms import TaskForm
from django.shortcuts import redirect
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404
from django.core.urlresolvers import reverse
# Create your views here.
def tasks_list(request):
tasks = Task.objects.filter(created_date__lte=timezone.now()).order_by('created_date')
form = TaskForm()
if request.method == "POST":
form = TaskForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.created_date = timezone.now()
post.save()
#return render(request, 'todo/tasks_list.html', {'tasks': tasks, 'form': form})
return HttpResponseRedirect('/')
else:
form = TaskForm()
return render(request, 'todo/tasks_list.html', {'tasks': tasks, 'form': form})
def post_remove(request, new_id):
post = get_object_or_404(Task, id=new_id)
post.delete()
return redirect('todo.views.tasks_list')
url.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.tasks_list, name='tasks_list'),
#url(r'^$', views.tasks_list, name='post_remove'),
]
form.py
from django import forms
from .models import Task
class TaskForm(forms.ModelForm):
title = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Add todo'}), label='')
due_date = forms.DateField(widget=forms.DateInput(attrs={'placeholder': 'Add due date', 'class':'datepicker'}), label='')
class Meta:
model = Task
fields = ('title', 'due_date',)
テンプレート/ task_list.html
{% extends 'todo/base.html' %}
{% load bootstrap %}
{% block content %}
<h1>Todos</h1>
<div class="container" id="container">
<div class="input-group">
<!--<input type="text" class="form-control" id="textField" placeholder="Add tasks">-->
<form method="POST" class="post-form" >{% csrf_token %}
{{ form|bootstrap }}
<span class="input-group-btn">
<button class="btn btn-default" type="submit" id="plusSign">Go!</button>
</span>
</form>
</div><!-- /input-group -->
<table style="width:100%" id='todoTable'>
<thead id="tableHead">
<tr>
<td>Todo</td>
<td>due date</td>
<td>delete</td>
</tr>
</thead>
<tbody>
{% for task in tasks %}
<tr>
<td>{{ task.title }}</td>
<td> {{ task.due_date }} </td>
<td> <a class="btn btn-default" href="{% url 'tasks_list' %}"><span class="glyphicon glyphicon-remove"></span></a> </td>
</tr>
</body>
{% endfor %}
</table>
</div>
{% endblock %}
編集:
私は、Djangoの女の子のチュートリアルからコードを使用して解決策を見つけました。
Views.py
def post_remove(request, pk):
post = get_object_or_404(Task, pk=pk)
post.delete()
return HttpResponseRedirect('/')
Url.py task_list.html
url(r'^task/(?P<pk>\d+)/remove/$', views.post_remove, name='post_remove'),
テンプレート/
<td> <a class="btn btn-default" href="{% url 'post_remove' pk=task.pk %}"><span class="glyphicon glyphicon-remove"></span></a></td>
でした誰もチェック:
私は、次のコードを追加しました私の理解が削除は正しいですか?
のでtask_list.html
は、特定のhrefでのみ「TODO」を削除するviews.py
にpost_remove機能を可能とするため、ボタンがクリックされたときに除去のみ機能href="/task/49/remove/"
として各TODOに主キーとのリンクを追加していますpost_remove関数のリクエストパラメータ?
ありがとうございました! 私の編集を見ていただけますか? – Squexis
あなたのコードを見ると正しいように見えますが、リンクをクリックすると、ユーザーは ''/'' URLにリダイレクトされます。あなたの質問は、ページリロードのない「タスク」を直接削除することを目的としたものではありませんか? –