جَلال انسانی وطندوست و میهنپرست است.
او که از کار کردن با تقویم میلادی و تبدیل دائم آن به تقویم شمسی خسته شده بود، از شما برای رفع این مشکل درخواست کمک کرده است. از آنجایی که شما نیز انسانی وطندوست و میهنپرست هستید، با کمال میل به کمک او میشتابید و به جَلال کمک میکنید تا با تقویم جَلالی کار کند.
در این پروژه شما باید قابلیت اضافهکردن تاریخ فارسی به مدل جنگو را با استفاده از کتابخانهی 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
- در لیست
CustomUserها، مقادیر زیر نمایش داده شود (ترتیب مهم نیست):usernamefirst_namelast_namegendernational_codebirthday_date
توجه: فیلدهای first_name و last_name از روی فیلد full_name ایجاد میشوند.
- قابلیت جستجو بر اساس
usernameوfull_nameوجود داشته باشد. - لیست
CustomUserها براساسceremony_datetime، به صورت صعودی مرتب شده باشد.
تست نمونه
در فایلهای اولیهای که دانلود کردید یکسری داده اولیه به عنوان نمونه قرار داده شده است. میتوانید قبل از فرستادن سوال در سایت، این تستها را ببینید تا با نحوه داوری ما آشنا شوید و از پاسخ خود اطمینان حاصل نمایید.
تستها را میتوانید با دستور زیر اجرا کنید:
python manage.py test
نکات
- شما تنها مجوز ایجاد تغییرات در فایلهای
Users/models.py،Users/forms.pyوUsers/admin.pyرا دارید و تمامی تغییرات دیگر شما در فایلهای پروژه نادیده گرفته خواهند شد. - فراموش نکنید که میتوانید با مطالعهی
testsample.pyبا روش تست کردن مدلها، فرمها و ادمینها آشنا شوید.
نحوه ارسال
یک فایل ZIP حاوی همهی فایلهای پروژه، آپلود کنید. نام فایل ZIP اهمیتی ندارد.
ارسال پاسخ برای این سؤال