آموزش هایی برای پایتون ، جنگو و توسعه ی وب اپلیکیشن

نویسنده : آرش ارزنده نیا

در ابتدا تنها یک متخصص شبکه های مایکروسافتی بودم ، کم کم به دنیای سیسکو و محیط های کامند لاینی علاقه مند شدم ، همزمان لینوکس رو هم توی پروژه هام دخیل میکردم ، چون در زمان دانشجویی تسلط خوبی روی طراحی وب سایت داشتم شروع کردم به نوشتن نرم افزارهای تحت وب ، تا مدت ها با php تمام پروژه هامو انجام میدادم ، گهگاهی هم با سی شارپ ، تا اینکه سوییچ کردم روی پایتون ، از اینجا به بعدش رو با هم تو این بلاگ میگذرونیم

استفاده از Widget در ModelForm


هر گاه بخواهیم نحوه ی نمایش فرم های ساخته شده توسط جنگو را تغییر دهیم باید از widget استفاده بکنیم به طور مثال فرض کنید میخواهید فیلدی را که پر کردن آن توسط کاربر اجباری نیست را تبدیل به یک فیلد اجباری بکنید ، و یا به طور مثال یک کلاس خاص را به فیلد خود اختصاص دهید و یا نحوه ی نمایش آن را حتی تغییر دهید مثلا به جای text از textarea استفاده بکنید

به روش‌های مختلف میتوانیم از widget در ساخت فرم‌های خود بهره ببریم.

from django.db import models


class MyModel(models.model):
    title = models.CharField(max_length=255)
    description = models.CharField(
        max_length=5000, help_text='برای محصول خود توضیحی چند خطی بنویسید')

در بالا ما مدل نمونه مورد استفاده خود را برای این مقاله نوشتیم ، دقت کنید از پارامتری به نام help_text در یکی از این فیلد ها استفاده کرده‌ایم ، مقدار این پارامتر در قسمت جنگو ادمین به عنوان یک متن راهنما برای اپراتور یا ادمین سایت در زیر آن فیلد قابل نمایش خواهد بود

from django import forms

from .models import MyModel


class MyForm(forms.ModelForm):

    description = forms.CharField(widget=forms.Textarea)

    class Meta:
        model = MyModel

در اینجا ما فیلد description را به یک Texarea در فرم خود تبدیل کردیم ، این نوع استفاده از Widget جزو بدترین نوع های استفاده میباشد به این خاطر که ما متن راهنما و سایر ویژگی‌های فیلد خود نظیر لیبل آن فیلد ( که با عبارتverbose_name در model ذکر می‌شود) را از دست میدهیم.

و اما راه بهتر

from django import forms

from .models import MyModel


class MyForm(forms.ModelForm):

    class Meta:
        model = MyModel

    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['description'].widget = forms.Textarea

و بهترین راه

from django import forms

from .models import MyModel


class MyForm(forms.ModelForm):

    class Meta:
        model = MyModel
        widgets = {
            'description': forms.Textarea,
        }


Admin Django Password Shell django filter form get python query required جنگو فرم پایتون

نظرات شما :