ویوی بروزرسانی | Update View

جنگو

سلام

بیایید به پیاده سازی پروژۀ خودمان باز گردیم. این بار می خواهیم از GCBV برای پیاده سازی ویوی مربوط به edit post استفاده کنیم.

boards/views.py (مشاهده کد کامل)

با UpdateView  و CreateView امکان تعریف form_class یا fieldها را در اختیار داریم.

در مثال بالا از fields برای ساخت فرم مدل به صورت موقتی استفاده کرده ایم.

جنگو با این کار از یک فرم مدل برای ارسال یک فرم با استفاده از مدل پست استفاده خواهد کرد.

فرم مذکور یک فرم بسیار ساده و صرفاً دارای فیلدی به نام message است. به دلیل سادگی فیلدهای فرم، پیاده سازی درون همین کلاس انجام شده اما برای فرم هایی با فیلدهای بیشتر توصیه می شود که خارج از این کلاس، فرم مدل خود را پیاده سازی کرده و در این قسمت به آن لینک و ارجاع دهیم.

خط مربوط به template_name هم که مشخص بوده و به قالب مربوط به فرم اشاره دارد.

از متغیر pk_url_kwarg برای شناسایی نام آرگومانی استفاده خواهد شد که قرار است برای بازیابی شی Post استفاده شود. این نام مشابه نام تعریف شده در urls.py است.

اگر ویژگی context_object_name در خط بعدی را تنظیم و مقداردهی نکنیم؛ شی Post در قالب های برنامه به عنوان یک «.object» قابل دسترسی خواهد بود و برای دسترسی به فیلدهای آن باید از کلمۀ object استفاده کنیم. اینکار خوانایی برنامه را کم کرده و حتی امکان تصادم به وجود می آید. بنابراین از context_object_name استفاده می کنیم تا آن را به Post تغییر نام دهیم. نحوۀ استفاده از آن در قالب edit_post.html و به شکل زیر دیده می شود. موضوع بعد از خواندن مثال زیر واضح می شود.

در این مثال خاص لازم است متد فعلی ()form_valid را با هدف تنظیم فیلدهای بیشتری نظیر updated_by و updated_at وارد کنیم.

قابل مشاهده است که متد ()form_valid اولیه شبیه UpdateView#form_valid است.

myproject/urls.py (مشاهده کد کامل)

حالا می توانیم لینکی را برای ویرایش صفحه اضافه کنیم.

templates/topic_posts.html (مشاهده کد کامل)

templates/edit_post.html (مشاهده کد کامل)

همانطور که گفته شد برای دسترسی به شی پست از post.topic.board.pk استفاده می کنیم. اما اگر context_object_name را با مقدار Post تغییر نداده بودیم برای دسترسی به آن باید از عبارت object.topic.board.pk استفاده می کردیم. حالا موضوع روشن شد؟!!

ترجمۀ اختصاصی توسط تمدن

 

مطلب بعدی: تست ویوی بروزرسانی

مطلب قبلی: Generic Class-Based View

بدون دیدگاه

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

جنگو
صفحه بندی با استفاده از FBV

سلام کد زیر مربوط به پیاده سازی صفحه بندی با استفاده از توابع است. boards/views.py (مشاهده کد کامل) from django.db.models import Count from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.shortcuts import get_object_or_404, render from django.views.generic import ListView from .models import Board def board_topics(request, pk): board = get_object_or_404(Board, pk=pk) queryset = …

جنگو
صفحه بندی و شماره گذاری صفحات

سلام این کار با استفاده از CBV بسیار آسان است. اما قبل از آن می خواهیم صفحه بندی مطالب را به صورت دستی انجام دهیم تا از مکانیسم واقعی آن آگاهی پیدا کنی و سپس از تکنولوژی CBV بهره برداری می کنیم. از الآن به بعد روی ویوی board_topics کار …

جنگو
ویوی لیست | List View

سلام با بازتعریف ویوی قبلی می توانیم از مزایای CBV بهره مند شویم. در این مثال می خواهیم صفحۀ اصلی را تغییر دهیم. در این صفحه ما صرفا تمام بوردها را از دیتابیس گرفته و در HTML لیست می کنیم. boards/views.py from django.shortcuts import render from .models import Board def …

هرگونه استفادۀ از این آموزش به صورت رایگان و با ارجاع به تمدن جایز است.