1

사용자가 자신의 프로필을 편집 할 수있는 양식이 있습니다. 필드 중 하나는 '생년월일'입니다. 편집하는 동안 양식은 데이터베이스 (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">&nbsp;</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, 
    }); 
+1

는 input_formats가 = ('D %의이'DOB forms.DateField = (초기 date.today =() = forms.DateInput 위젯 (체재 = '% D. % m. %의 Y')을보십시오. % m. % Y ',))'필요에 따라 날짜 형식을 변경하십시오. – kartheek

답변

1

Aamir Adnan 및 kartheek에게 감사 드리며, 내게 맞는 포인터를 주셔서! 마지막으로 초기화 완벽하게 작동

 self.fields['dob'].input_formats=(settings.DATE_INPUT_FORMATS) 

그래서 지금은 내 양식에 따라서이다 ExtendedProfileForm의에 다음과 같은 추가 된 일

것은!

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'} 
    self.fields['dob'].input_formats=(settings.DATE_INPUT_FORMATS) 

    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")) 
     else: 
      newlist.append(key) 

    self.helper.layout = Layout(
     Fieldset("", 
       *newlist 
     ), 
    ) 
+0

Sandeep, 답을 자세히 설명해 주셔서 감사합니다. 엄청나게 도와 줬어. – user1261774

2

에 JS 전화 :

def ExtendedProfileModel(forms.ModelForm): 
    dob = forms.DateField(label=_('Date of birth'), input_formats=['%m/%d/%y']) 

    def __init__(self, *args, **kwargs): 
     super(ExtendedProfileModel, self).__init__(*args, **kwargs) 
     self.fields['dob'].widget.format = '%m/%d/%y' 
+0

그래, 시도했지만 작동하지 않습니다. : –

+0

양식에 사용자 정의 필드를 추가하여 시도해보십시오. 업데이트 된 답변을보고 datepicker의 형식이 'mm/dd/yyyy'인지 확인하십시오 .. –

+0

안녕하세요, Aamir 님, 먼저 답변을 보내 주셔서 감사합니다. 접근 방식이 작동 중입니다 –

관련 문제