১১-২ : আপডেট এন্ড ডিলিট ভিউ
এই মডিউলে দেখব ক্লাস বেসড ভিউ , UpdateView ও DeleteView ব্যবহার করে কিভাবে Post মডেলের ডেটা আপডেট ও ডিলিট করা যায়।
edit_post( ) ফাংশনের অনুরুপ ক্লাস EditPostView লিখে ফেলি-
Code:: 11.2.1 posts/views.py
...
...
...
from django.urls import reverse_lazy
from django.views.generic import CreateView,UpdateView,DeleteView
...
...
...
class EditPostView(UpdateView):
model = models.Post
form_class = forms.PostForm
template_name = 'add_post.html'
pk_url_kwarg = 'id'
success_url = reverse_lazy('profile')
UpdateView ক্লাসের এ্যাট্রিবিউট pk_url_kwarg এর ভ্যালু 'id' সেট করা হয়েছে । এর ফলে Post মডেলের id ফিল্ডের যে রেকর্ডের সাথে url প্যাটার্ন থেকে পাঠানো integer Argument ম্যাচ করবে , সেই রেকর্ডটির ডেটা PostForm এর মাধ্যমে আপডেট হওয়ার জন্য 'add_post.html' ফাইলে লোড হবে
posts/urls.py ফাইলের URL-প্যাটার্ন এডিট করে নিচের মত করে লিখি -

এখন যে কোনো একটি পোস্ট আপডেট করার জন্য Edit বাটনে ক্লিক করে নিচের মত করে এডিট করি-

সাবমিট বাটনে ক্লিক করলে দেখতে পাব পোস্টটি আপডেটেড হয়েছে-

এখন, Post মডেল থেকে ডেটা ডিলিট করার পালা, delete_post( ) ফাংশনের অনুরুপ ক্লাস DeletePostView(DeleteView) লিখে ফেলি-
Code:: 11.2.2 posts/views.py
...
...
...
from django.urls import reverse_lazy
from django.views.generic import CreateView,UpdateView,DeleteView
...
...
...
class DeletePostView(DeleteView):
model = models.Post
template_name = 'delete.html'
success_url = reverse_lazy('profile')
pk_url_kwarg = 'id'
আশাকরি, DeleteView ক্লাসের এ্যাট্রিবিউট pk_url_kwarg এর ভ্যালু কেন 'id' সেট করা হয়েছে সেটা আর ব্যাখ্যা করা প্রয়োজন নেই
খেয়াল করলে দেখতে পাব, template_name এ্যাট্রিবিউটের ভ্যালু রাখা হয়েছে 'delete.html' , কিন্ত আমাদের তো 'delete.html' নামে কোনো টেমপ্লেট ফাইল নেই । অতএব, তৈরি করে ফেলি-
Code:: 11.2.3 posts/templates/delete.html
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<form style="width:50% ; margin : auto" method="post">
<h1>Are you sure you want to delete?</h1>
{% csrf_token %}
{{form | crispy}}
<button class="btn btn-warning">Delete</button>
</form>
{% endblock %}
এখন যে কোনো একটি পোস্ট এর Delete বাটনে ক্লিক করলে পোস্টটি ডিলিট হয়ে যাবে ।
Last updated