جَلال انسانی وطن‌دوست و میهن‌پرست است.

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

در این پروژه شما باید قابلیت اضافه‌کردن تاریخ فارسی به مدل جنگو را با استفاده از کتابخانه‌ی 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
Plain text

مدل 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'
Python
terminal

دیکشنری بازگردانده‌شده از این تابع، باید به‌صورت زیر باشد:

{'first_name': first_name, 'last_name': last_name}
Python

برای مثال، برای کاربری با full_name='Saeid Zamani'، خروجی تابع به‌صورت زیر خواهدبود:

{'first_name': 'Saeid', 'last_name': 'Zamani'}
Python
  • تابع 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
Python
terminal
  • تابع 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'
Python

ادمین

مدل‌ 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
Shell
terminal

نکات

  • شما تنها مجوز ایجاد تغییرات در فایل‌های Users/models.py‍، Users/forms.py و Users/admin.py را دارید و تمامی تغییرات دیگر شما در فایل‌های پروژه نادیده گرفته خواهند شد.
  • فراموش نکنید که می‌توانید با مطالعه‌ی testsample.py با روش تست کردن مدل‌ها، فرم‌ها و ادمین‌ها آشنا شوید.

نحوه ارسال

یک فایل ZIP حاوی همه‌ی فایل‌های پروژه، آپلود کنید. نام فایل ZIP اهمیتی ندارد.


ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.