Open alighiasi opened 3 years ago
در مورد پنل ادمین جنگو صحبت میکنید یا یک فرم کاستوم؟ من فرض میکنم در مورد یک فرم کاستوم سوال پرسیدید
بنا به هر دلیلی اگه مشکلی در لود شدن فایل های جاواسکریپتی شما وجود داشته باشد، اگر از یک JalaliDateField استفاده میکنید نباید در ذخیره سازی آن مشکلی وجود داشته باشد (در فرم به شکل شمسی وارد میشود و در دیتابیس به شکل میلادی ذخیره میشود)، چرا که از jqueryUi صرفا برای نمایش Datepicker استفاده شده است نه تبدیل تاریخ. پس اگر در تبدیل تاریخ به اشکال میخورد، احتمالا باید داکیومنت ها رو مجددا بررسی فرمایید.
همانگونه که در مثال های داکیومنت مشخص هست فایل django_jajali.min.js خودش شامل jquery, jqueryUi, main.js نیز هست. پس در فرم های کاستوم توصیه میشه که یا خودتون این ها رو مطابق با داکیومنت به صورت جداگانه لود کنید یا در انتهای تمپلیت لود کنید تا احتمال کانفلیکت کمتر بشه
سلام و سپاس از وقتی که گذاشتین و زحمتی که میکشید در خصوص فرم کاستوم مشکل دارم توی ادمین همه چی درسته . شما در کامنتها فرمودین تاریخ در دیتابیس بایستی میلادی ذخیره بشه تاریخهایی که از پنل ادمین ثبت میشند همه میلادی هستند و موقع نمایش شمسی دیده میشند ولی تاریخی که از طریق کدهای زیر ثبت میشه بشکل شمسی توی دیتابیس ذخیره میشه و من فکر کردم شاید به خاطر وابستگی فایلهای جاوااسکریپت و لود نشدن به موقع فایلها اتفاق افتاده کدهای من به این شکله
forms.py
class BillForm(forms.ModelForm):
class Meta:
model = Bill
fields = ('pay_date', 'amount', 'bill_number', 'bank_name', 'insurance_id' )
def __init__(self, *args, **kwargs):
super(BillForm, self).__init__(*args, **kwargs)
self.fields['pay_date'] = JalaliDateField(label='تاریخ پرداخت', widget=AdminJalaliDateWidget)
CustomerBillsFormset = inlineformset_factory(Customer, Bill, extra = 2, form = BillForm, )
views.py
class CustomerBillsEditView(SingleObjectMixin, FormView):
model = Customer
template_name = 'customers/customer_bills_edit.html'
def get(self, request, *args, **kwargs):
self.object = self.get_object(queryset=Customer.objects.all())
return super().get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
self.object = self.get_object(queryset=Customer.objects.all())
return super().post(request, *args, **kwargs)
def get_form(self, form_class=None):
return CustomerBillsFormset(**self.get_form_kwargs(), instance=self.object)
def form_valid(self, form):
form.save()
messages.add_message(
self.request,
messages.SUCCESS,
'تغییرات ذخیره شدند'
)
return HttpResponseRedirect(self.get_success_url())
def get_success_url(self):
return reverse('accounts:customer_detail', kwargs={'pk': self.object.pk})
customer_bills_edit.html
{% extends 'registration/base_admin.html' %}
{% load static %}
{% load widget_tweaks %}
{% load jalali_tags %}
{% load crispy_forms_tags %}
{% block content %}
<form action="" method="POST" enctype="multipart/form-data">
{% for hidden_field in form.hidden_fields %}
{{ hidden_field.errors }}
{{ hidden_field }}
{% endfor %}
{% csrf_token %}
{{ form.management_form }}
{{ form.non_form_errors }}
{% for child_form in form.forms %}
<hr>
<h5>
{% if child_form.instance.id %}
فیش پرداختی: {{ child_form.instance.insurance_id }}
{% else %}
{% if form.forms|length > 1 %}
فیش پرداختی جدید
{% else %}
فیش جدید
{% endif %}
{% endif %}
</h5>
{% for hidden_field in child_form.hidden_fields %}
{{ hidden_field.errors }}
{% endfor %}
<div class="row">
<div class="col-lg-4 col-md-4 col-xs-12">
{{ child_form.pay_date.errors }}
{{ child_form.pay_date | as_crispy_field }}
</div>
<div class="col-lg-4 col-md-4 col-xs-12">
{{ child_form.amount.errors }}
{{ child_form.amount | as_crispy_field }}
</div>
...
{% endfor %}
<button type="submit" value="Update collection" class="btn btn-primary w-100 mb-3">ثبت</button>
<a href="{{ customer.get_absolute_url }}" role="button" class="btn btn-secondary w-100">بازگشت</a>
</p>
</form>
<link rel="stylesheet" href="{% static 'admin/jquery.ui.datepicker.jalali/themes/base/jquery-ui.min.css' %}">
<script src="{% static 'admin/js/django_jalali.min.js' %}"></script>
{{ form.media }}
{% endblock content %}
من حدس میزنم که مشکل از CustomerBillsEditView هست و نیاز به دیباگ کردن داره. برای دیباگ کردن پیشنهاد میکنم، اول کلا از JalaliDateField استفاده نکنید و چک کنید آیا فرمست به درستی کار میکنه؟ آیا مقادیر غیر معتبر به اون بدید به شما به درستی اررور میده؟ آیا مقادیر به درستی ویرایش یا ایجاد میشن؟ من حدس میزنم که در یکی از این قسمت ها بدون JalaliDateField هم مشکل داره.
سلام مهندس عزیز ممنونم از راهنمایی شما مشکل حل شد که سر فرصت اینجا توضیح میدم فقط یک باگی توی تبدیل تاریخهای خاص مثل دوم فروردین هزاروچهارصد وجود داره 2021/3/22 و این خطا رو میده couldn't be interpreted in time zone Asia/Tehran, it may be ambiguous or it may not exist 00:00:00 2021-03-22 سپاسگزارم
سلام وقتی فایل django_jalali.min.js قبل از فایل جی کوئری و جی کوئری یو ای در صفحه لود میشه در فرمهای inline formset مشکل ذخیره تاریخ بشکل شمسی در دیتا بیس رخ میدهد فکر میکنم چون در تعریف inline formset ما از widgets استفاده میکنیم جنگو سبب لود شدن زود هنگام django_jalali.min.js میشود ممنون میشم اگه برای این مشکل راهنمایی کنید