사용자가 자신의 프로필을 편집 할 수있는 양식이 있습니다. 필드 중 하나는 '생년월일'입니다. 편집하는 동안 양식은 데이터베이스 (mySQL)에서 가져온 날짜를 선택하여 '1982 년 6 월 10 일'형식으로 표시합니다. '제출'을 누르면 '올바른 날짜를 입력하십시오.'라는 오류가 발생합니다. 필드는 '읽기 전용'이므로 datepicker를 사용하여 날짜를 선택합니다. eternicode (https://github.com/eternicode/bootstrap-datepicker/)에서 datepicker를 사용하고 있습니다.Django는 양식에 표시된 날짜를 저장하지 않습니다.
양식을 렌더링하려면 crispy-forms (v1.2.3) 및 twitter-bootstrap을 사용하고 있습니다.
datepicker를 사용하여 날짜를 선택하면 mm/dd/yyyy 형식입니다. 양식을 제출하면 제대로 저장됩니다.
내 문제를 해결할 수있는 곳이나 다른 곳에서 아무 것도 찾을 수 없습니다. 나는 그것이 어딘가에 약간의 조정이 있어야한다고 느낀다. 그러나 많은 다양한 접근에도 불구하고 그것을 정확하게 지적 할 수는 없다.
그런데 'input'태그에 value = "{{field.value | date : 'm/d/Y'}}"를 지정하면 날짜가이 형식으로 표시되고 성공적으로 저장됩니다 폼이 다시로드 될 때까지 위젯에서 사라집니다 (페이지를 새로 고침하여 다시로드 할 수 있음)
settings.py : USE_I18N, USE_L10N 및 USE_TZ가 모두 'True'로 설정되어 있으며, TIME_ZONE = 'Asia/Kolkata '
가능하면'1982 년 6 월 10 일 '형식으로 표시 날짜를 유지하고 계속 양식을 저장할 수 있습니다. 그렇지 않으면 양식의 위젯에서 표시 날짜 형식을 변경해도 상관 없습니다. 귀하의 도움을 높이 평가 될 것입니다.
models.py
class Profile(models.Model):
class Meta:
verbose_name_plural = _('Profiles')
user = models.OneToOneField(User, verbose_name=_('User'), related_name='enduser', unique=True)
dob = models.DateField(_('Date of Birth'), help_text=_(u"Age: 18yrs - 90yrs"))
:
:
forms.py
class ExtendedProfileForm(forms.ModelForm):
class Meta:
model = Profile
exclude = ('user',)
# some crispy forms related code
def __init__(self, *args, **kwargs):
super(ExtendedProfileForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_class = 'form-inline'
self.helper.form_tag = False
self.helper.html5_required = True
self.helper.help_text_inline = True
self.helper.attrs = {'accept-charset' : 'utf-8'}
fieldlist = self.fields.keys()
newlist = []
for key in fieldlist:
if key == 'dob':
newlist.append(Field("dob", css_class="input-small", readonly="readonly", id="id_dob", template="datepick.html", input_formats=(settings.DATE_INPUT_FORMATS)))
else:
newlist.append(key)
self.helper.layout = Layout(
Fieldset("",
*newlist
),
)
datepick.html
{% comment %}
Ref: https://github.com/maraujop/django-crispy-forms/issues/134
{% endcomment %}
{% load crispy_forms_field %}
<div id="div_{{ field.auto_id }}" class="clearfix control-group{% if field.errors %} error{% endif %}">
{% if field.label %}
<label for="id_{{ field.id_for_label }}" class="control-label {% if field.field.required %}requiredField{% endif %}"> {{ field.label|safe }}{% if field.field.required %}<span class="asteriskField">*</span>{% endif %} </label>
{% endif %}
<div class="controls">
<div id="{{ field.auto_id }}" class="input-append date" data-date-format="%m/%d/%Y">
<input size="40" type="text" readonly="readonly" {% if field.value %} value="{{ field.value }}"{% endif %} name="{% if form.prefix %}{{form.prefix}}-{% endif %}{{ field.name }}"/><span class="add-on"><i class="icon-calendar"> </i></span>
</div>
{% include 'bootstrap/layout/help_text_and_errors.html' %}
</div>
</div>
0 : 여기에
내 관련 코드 조각입니다
settings.py
DATE_INPUT_FORMATS = (
'%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06'
'%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006'
'%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006'
'%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006'
'%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006'
)
당신은 양식 필드에 날짜 선택기 형식과 비슷한 날짜 형식을 정의 할 필요가 날짜 선택기
$('#id_dob').datepicker({
format : 'mm/dd/yyyy',
endDate : '-18y', // 18 years in the past
startDate : '-90y', // we assume a person to be max 90 years old to use this site
startView : 2,
autoclose : true,
});
는 input_formats가 = ('D %의이'DOB forms.DateField = (초기 date.today =() = forms.DateInput 위젯 (체재 = '% D. % m. %의 Y')을보십시오. % m. % Y ',))'필요에 따라 날짜 형식을 변경하십시오. – kartheek