ডেটাবেজে এক্সিস্টিং পোস্ট এডিট করে এডিটেড ডেটা ডেটাবেজে সেভ করার জন্য যে Post Object বা instance বা Record টি এডিট করতে চাচ্ছি তার ডেটা PostForm এর মাধ্যমে ফ্রন্ট-এন্ডে পাঠাতে হবে , তারপর সাবমিটেড ফর্ম ডেটা ডেটাবেজে সেভ করতে হবে ।
পোস্ট এডিট করার জন্য নতুন একটি URL-প্যাটার্ন এ্যাড করি
Code:: 7.9.1
posts/urls.py
from django.contrib import admin
from django.urls import path, include
from . import views
urlpatterns = [
path('add/', views.add_post, name='add_post'),
path('edit/<int:id>', views.edit_post, name='edit_post'),
]
৭ নং লাইনে এ্যাড করা URL-প্যাটার্নের মাধ্যমে edit_post( ) ফাংশনে একটি int প্যারামিটার পাঠানো হয়েছে। edit_post( ) ফাংশন লিখে ফেলি-
Code:: 7.9.2
posts/views.py
from django.shortcuts import render, redirect
from . import forms
from . import models
# Create your views here.
def add_post(request):
if request.method == 'POST': # user post request koreche
post_form = forms.PostForm(request.POST)
if post_form.is_valid():
post_form.save()
return redirect('add_post')
else: # user normally website e gele blank form pabe
post_form = forms.PostForm()
return render(request, 'add_post.html', {'form' : post_form})
def edit_post(request, id):
post = models.Post.objects.get(pk=id)
post_form = forms.PostForm(instance=post)
# print(post.title)
if request.method == 'POST': # user post request koreche
post_form = forms.PostForm(request.POST, instance=post) # user er post request data ekhane capture korlam
if post_form.is_valid(): # post kora data gula amra valid kina check kortechi
post_form.save() # jodi data valid hoy taile database e save korbo
return redirect('homepage') # sob thik thakle take add author ei url e pathiye dibo
return render(request, 'add_post.html', {'form' : post_form})
১৮ নং লাইনে get( ) ফাংশনে pk ফিল্ডের ভ্যালু হিসেবে id কে পাঠিয়ে নির্দিষ্ট একটি Post Object এর ডেটা post ভেরিয়েবলে পেয়েছি। একটা প্রশ্ন আসা খুব স্বাভাবিক, Post মডেলে তো কোনো pk ফিল্ডই নাই, তাহলে pk ফিল্ডের জন্য ডেটা পাঠালাম কিভাবে? উত্তর হলো - যদি কোনো মডেলে প্রাইমারি কী হিসেবে কোনো ফিল্ডকে স্পেসিফাই করে না দেয়া হয় সেক্ষেত্রে জ্যাংগো নিজে থেকে pk নামে একটা প্রাইমারি কী ফিল্ড তৈরি করে নেয়।
পরের লাইনে post_form ভেরিয়েবলে একটি PostForm রাখা হয়েছে যার স্ব স্ব ফিল্ডে নির্দিষ্ট Post Object - 'post' এর ডেটা রয়েছে, এ কাজটি করা হয়েছে instance এর ভ্যালু post পাঠিয়ে।
templates/home.html ফাইলে প্রতিটি পোস্টের জন্য একটি <a> ট্যাগ এ্যাড করি -