Xóa khách mời
Thuộc phần Biểu mẫu trong hành trình Django của Coddy. Bài học 20 trên 20.
Người tổ chức cần xóa mọi người khỏi trang khách mời. Mỗi hàng có một biểu mẫu nhỏ riêng, với action là URL của hàng đó, nên nút chỉ gửi dữ liệu của hàng tương ứng. Danh sách việc cần làm có nút Hoàn tất cho từng việc:
{% for task in tasks %}
<li>
{{ task.title }}
<form method="post" action="{% url 'todo:finish' task.pk %}">
{% csrf_token %}
<button type="submit">Done</button>
</form>
</li>
{% endfor %}Hàm như finish không hiển thị trang nào: hàm thay đổi dữ liệu rồi chuyển hướng. @require_POST, thuộc django.views.decorators.http, từ chối mọi yêu cầu khác với lỗi 405 Method Not Allowed, nên liên kết hoặc địa chỉ được nhập thủ công sẽ không xóa ai cả:
@require_POST
def finish(request, pk):Sau khi xử lý, hãy thêm thông báo rồi chuyển hướng như trước.
Thử thách
KhóXóa một khách.
- Trong
events/urls.py, thêmrsvps/<int:pk>/remove/với tênremove_rsvp. - Trong
events/views.py, viếtremove_rsvpvới@require_POST(từdjango.views.decorators.http). Hàm này xóa RSVP, thêm thông báoAda was removed from the guest list.kèm tên khách và chuyển hướng đến trang khách. - Trong
guest_list.html, thêm biểu mẫu POST cho từng khách, có{% csrf_token %}và nútRemovegửi yêu cầu đến URL tương ứng.
Xóa Ada: chỉ còn Grace.
Tự làm thử
from django.contrib import messages
from django.shortcuts import get_object_or_404, redirect, render
from .forms import EventForm, RSVPForm
from .models import Event
def event_list(request):
q = request.GET.get("q", "")
events = Event.objects.all()
if q:
events = events.filter(title__icontains=q)
return render(request, "events/event_list.html", {"events": events, "q": q})
def event_detail(request, pk):
event = get_object_or_404(Event, pk=pk)
if request.method == "POST":
form = RSVPForm(request.POST, event=event)
if form.is_valid():
rsvp = form.save(commit=False)
rsvp.event = event
rsvp.save()
messages.success(request, "You're on the list!")
return redirect("events:detail", pk=event.pk)
else:
form = RSVPForm(event=event)
return render(request, "events/event_detail.html", {"event": event, "form": form})
def new_event(request):
if request.method == "POST":
form = EventForm(request.POST)
if form.is_valid():
event = form.save()
messages.success(request, "Your event was added.")
return redirect("events:detail", pk=event.pk)
else:
form = EventForm()
return render(request, "events/new_event.html", {"form": form})
def edit_event(request, pk):
event = get_object_or_404(Event, pk=pk)
if request.method == "POST":
form = EventForm(request.POST, instance=event)
if form.is_valid():
form.save()
messages.success(request, "Your changes were saved.")
return redirect("events:detail", pk=event.pk)
else:
form = EventForm(instance=event)
return render(request, "events/edit_event.html", {"form": form, "event": event})
def delete_event(request, pk):
event = get_object_or_404(Event, pk=pk)
if request.method == "POST":
event.delete()
messages.success(request, "The event was deleted.")
return redirect("events:list")
return render(request, "events/delete_event.html", {"event": event})
def guest_list(request, pk):
event = get_object_or_404(Event, pk=pk)
return render(request, "events/guest_list.html", {"event": event})
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Biểu mẫu
Tự luyện tập: Playground Django