جَلال انسانی وطندوست و میهنپرست است.
او که از کار کردن با تقویم میلادی و تبدیل دائم آن به تقویم شمسی خسته شده بود، از شما برای رفع این مشکل درخواست کمک کرده است. از آنجایی که شما نیز انسانی وطندوست و میهنپرست هستید، با کمال میل به کمک او میشتابید و به جَلال کمک میکنید تا با تقویم جَلالی کار کند.
در این پروژه شما باید قابلیت اضافهکردن تاریخ فارسی به مدل جنگو را با استفاده از کتابخانهی django_jalali
پیادهسازی کنید.
پروژه اولیه
پروژه اولیه را از این لینک دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است:
jalali
├── Users
│ ├── > admin.py <
│ ├── apps.py
│ ├── > forms.py <
│ ├── migrations
│ │ └── __init__.py
│ ├── > models.py <
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── jalali
│ ├── asgi.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
├── Pipfile
├── Pipfile.lock
└── requirements.txt
مدل CustomUser
اپلیکیشن Users
فقط شامل یک مدل به نام CustomUser
است که این مدل شامل فیلدهای زیر میباشد:
ویژگیها
- ویژگی
username
: این فیلد از نوعCharField
و حداکثر طول آن ۲۵۶ میباشد. - ویژگی
full_name
: این فیلد از نوعCharField
و حداکثر طول آن ۲۵۶ میباشد. - ویژگی
gender
: این فیلد از نوعCharField
میباشد. ویژگیgender
باید از بین جنسیتهایMale
وFemale
انتخاب شود و در داخل پایگاه داده به جایMale
حرفM
ذخیره و به جای کلمهیFemale
حرفF
ذخیره شود. - ویژگی
national_code
: این فیلد از نوعCharField
و حداکثر طول آن ۱۰ میباشد. - ویژگی
birthday_date
: این فیلد از نوع تاریخ (date
) شمسی میباشد. - ویژگی
ceremony_datetime
: این فیلد از نوع تاریخ و ساعت (datetime
) شمسی میباشد. - ویژگی
country
: این فیلد از نوعCharField
است و مقدار آن، برای همهی شئها برابر رشتهیIran
است.
توابع
- تابع
get_first_and_last_name
: این تابع،first_name
وlast_name
کاربر را از روی فیلدfull_name
بدست آورده و در قابل یک دیکشنری بازمیگرداند. تضمین میشود که فیلدfull_name
فقط شامل یک فاصله (آن هم بینfirst_name
وlast_name
) میباشد.
>>> valid_name = 'Mohammadreza Zamani'
>>> wrong_name = 'Mohammad Reza Zamani'
>>> wrong_name = 'Mohammad reza Zamani'
دیکشنری بازگرداندهشده از این تابع، باید بهصورت زیر باشد:
{'first_name': first_name, 'last_name': last_name}
برای مثال، برای کاربری با full_name='Saeid Zamani'
، خروجی تابع بهصورت زیر خواهدبود:
{'first_name': 'Saeid', 'last_name': 'Zamani'}
- تابع
get_age
: این تابع، سن کاربر را از روی فیلدbirthday_date
محاسبه کرده و بازمیگرداند. دقت کنید که این تابع باید جزء صحیح سن را بازگرداند. مثلا اگر شخصی ۵ سال و ۳ ماه سن داشت، باید عدد ۵ را بازگرداند یا اگر شخصی ۱۰ سال و ۱۱ ماه داشت باید عدد ۱۰ را بازگرداند.
>>> from Users.models import CustomUser
>>> b = CustomUser.objects.get(person_name='Sara')
>>> b.birthday_date
jdatetime.date(1377, 10, 8)
>>> b.get_age()
23
- تابع
is_birthday
: این تابع مشخص میکند که آیا امروز، روز تولد کاربر مورد نظر هست یا خیر. در صورتی که امروز، روز تولد کاربر بود، مقدارTrue
و در غیر اینصورت، مقدار False
را بازمیگرداند.
فرم CustomUserForm
تمامی فیلدهای مدل CustomUser
باید داخل کلاس CustomUserForm
در فایل forms.py
وجود داشته باشند.
اعتبارسنجیها:
- فیلد
national_code
باید دقیقا شامل ۱۰ کاراکتر باشد. - فیلد
full_name
باید حتماً شاملfirst_name
وlast_name
باشد و هر دوی این مقادیر باید عنوان باشند. عنوان بودن یعنی با یک حرف بزرگ انگلیسی شروع شده و بقیهی حروف هر کلمه کوچک باشند.
>>> valid_name = 'Arash Ghasemi'
>>> wrong_name = 'arash ghasemi'
ادمین
مدل CustomUser
موجود در models.py
باید در پنل ادمین ثبت شده و قابل مشاهده باشد.
شخصیسازی CustomUserAdmin
%align_right_start%
- در لیست
CustomUser
ها، مقادیر زیر نمایش داده شود (ترتیب مهم نیست):username
first_name
last_name
gender
national_code
birthday_date
توجه: فیلدهای first_name
و last_name
از روی فیلد full_name
ایجاد میشوند.
- قابلیت جستجو بر اساس
username
وfull_name
وجود داشته باشد. - لیست
CustomUser
ها براساسceremony_datetime
، به صورت صعودی مرتب شده باشد.
%align_end%
تست نمونه
در فایلهای اولیهای که دانلود کردید یکسری داده اولیه به عنوان نمونه قرار داده شده است. میتوانید قبل از فرستادن سوال در سایت، این تستها را ببینید تا با نحوه داوری ما آشنا شوید و از پاسخ خود اطمینان حاصل نمایید.
تستها را میتوانید با دستور زیر اجرا کنید:
python manage.py test
نکات
- شما تنها مجوز ایجاد تغییرات در فایلهای
Users/models.py
،Users/forms.py
وUsers/admin.py
را دارید و تمامی تغییرات دیگر شما در فایلهای پروژه نادیده گرفته خواهند شد. - فراموش نکنید که میتوانید با مطالعهی
testsample.py
با روش تست کردن مدلها، فرمها و ادمینها آشنا شوید.
نحوه ارسال
یک فایل ZIP حاوی همهی فایلهای پروژه، آپلود کنید. نام فایل ZIP اهمیتی ندارد.
ارسال پاسخ برای این سؤال