در ابتدا تنها یک متخصص شبکه های مایکروسافتی بودم ، کم کم به دنیای سیسکو و محیط های کامند لاینی علاقه مند شدم ، همزمان لینوکس رو هم توی پروژه هام دخیل میکردم ، چون در زمان دانشجویی تسلط خوبی روی طراحی وب سایت داشتم شروع کردم به نوشتن نرم افزارهای تحت وب ، تا مدت ها با php تمام پروژه هامو انجام میدادم ، گهگاهی هم با سی شارپ ، تا اینکه سوییچ کردم روی پایتون ، از اینجا به بعدش رو با هم تو این بلاگ میگذرونیم
هر گاه بخواهیم نحوه ی نمایش فرم های ساخته شده توسط جنگو را تغییر دهیم باید از 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, }