a-roomana / django-jalali-date

Jalali Date support for user interface. Easy conversion of DateTimeFiled to JalaliDateTimeField within the admin site, views, forms and templates.
MIT License
295 stars 33 forks source link

شمسی ذخیره می‌شود #21

Open iamliji opened 4 years ago

iamliji commented 4 years ago

در دادگان به صورت شمسی ذخیره می‌شود Capture

a-roomana commented 4 years ago

@legee سلام مطمئن هستید که براساس داکیومنت و مثال های موجود کد خود را پیاده سازی کردید؟

شما از طریق فرم جنگو این فیلد را پر کردید یا از طریق دیگری؟

iamliji commented 4 years ago

با سلام
converted manually.

a-roomana commented 4 years ago

@legee در کدی که سری قبل به من نشون دادید فکر میکنم که چند نکته رو باید بیان کنم

زمانی که شما از JalaliDateField استفاده میکنید، سمت فرآنت شما تاریخ شمسی وارد میکنید اما به محض این که فرم اعتبارسنجی میشه در واقع

form.is_valid()

صدا زده میشه، تاریخ ها به میلادی تبدیل میشوند و شما اگر مقدار فیلد را بگیرید یک تاریخ میلادی خواهد بود. و زمانی هم که فرم را ذخیره کنید تاریخ میلادی ذخیره خواهد شد نه شمسی.

حال ممکن است که شما بخواهید در فرم یا ویو از مقدار شمسی آن استفاده کنید، طبیعتا باید مقدار میلادی را در یک متغییر دیگر به شمسی تبدیل کنید. دقت کنید که مقدار درون فرم را نباید شمسی کنید. برای تبدیل تاریخ میلادی به شمسی میتوانید همانند داکیومنت از کد زیر استفاده کنید

from jalali_date import datetime2jalali, date2jalali

jalali_date = datetime2jalali(form.cleaned_data['my_field'])

در نهایت فکر میکنم علت این که در دیتابیس تاریخ شمسی ذخیره شده است این است که شما در فرم یا ویو مقدار آن را از به صورت دستی از میلادی به شمسی تبدیل کرده اید

ZahraZarei commented 4 years ago

سلام من هم همین مشکل رو دارم در فرمهای ادمین به صورت میلادی ذخیره میشود اما در فرمهای خودم به صورت شمسی ذخیره میشود.

به صورت فوق در فرم html استفاده میکنم.

deebajee2009 commented 2 years ago

@legee در کدی که سری قبل به من نشون دادید فکر میکنم که چند نکته رو باید بیان کنم

زمانی که شما از JalaliDateField استفاده میکنید، سمت فرآنت شما تاریخ شمسی وارد میکنید اما به محض این که فرم اعتبارسنجی میشه در واقع

form.is_valid()

صدا زده میشه، تاریخ ها به میلادی تبدیل میشوند و شما اگر مقدار فیلد را بگیرید یک تاریخ میلادی خواهد بود. و زمانی هم که فرم را ذخیره کنید تاریخ میلادی ذخیره خواهد شد نه شمسی.

حال ممکن است که شما بخواهید در فرم یا ویو از مقدار شمسی آن استفاده کنید، طبیعتا باید مقدار میلادی را در یک متغییر دیگر به شمسی تبدیل کنید. دقت کنید که مقدار درون فرم را نباید شمسی کنید. برای تبدیل تاریخ میلادی به شمسی میتوانید همانند داکیومنت از کد زیر استفاده کنید

from jalali_date import datetime2jalali, date2jalali

jalali_date = datetime2jalali(form.cleaned_data['my_field'])

در نهایت فکر میکنم علت این که در دیتابیس تاریخ شمسی ذخیره شده است این است که شما در فرم یا ویو مقدار آن را از به صورت دستی از میلادی به شمسی تبدیل کرده اید

اگر مقادیر تاریخ که با تابع تبدیل کردیم به شمسی بخواهیم در همون مدل متصل به فرم ذخیره بکنیم باید کار بکنیم؟