১১-২ : আপডেট এন্ড ডিলিট ভিউ

এই মডিউলে দেখব ক্লাস বেসড ভিউ , 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