2013-10-06 5 views
2

나는 알고있다. (I have read)와 비슷한 질문이 있지만 그 문제에 대한 질문이있다. Django DateTimefield를 필요하지 않게 만드는 방법은 무엇입니까?

내 forms.py 간다 방법 :

class DataForm(forms.ModelForm): 
    start_date = forms.CharField(
     widget=widgets.DateTimePicker(attrs={'class': 'form-control', 'style': 'width:90%'}), 
     required=False 
    ) 
.... 
class Meta: 
    model = Data 

내 models.py 그런 식으로 진행됩니다

if form.is_valid(): 
    form.save() 

I :

start_date = models.DateTimeField(null=True, blank=True) 

을 그리고 난 그런 식으로 저장하려고하면 이 오류가 발생했습니다 :

[u"'' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."] 

무엇이 잘못 되었나요? start_date 필드를 선택적으로 설정하려고합니다.

답변

4

start_dateDataFormCharField으로 신고했기 때문에 이런 현상이 발생하면 forms.DateTimeField을 사용해야합니다.

필드는 필수 항목이 아니므로 사용자는 필드를 비워 둘 수 있습니다.

  1. 양식 필드는 파이썬 타입으로 원시 데이터를 변환하려고 : 이는 형태로 데이터를 게시 할 때 장고 내부에서 발생하는 것입니다.
  2. 이렇게하려면 먼저 원시 데이터가 empty_values 배열 (필드의 소스 코드에 하드 코드 된 "비어있는"값 목록)에서 찾을 수 있는지 확인합니다.
  3. 값이 empty_values 인 경우 (상황에 따라 다름) 빈 값의 적절한 파이썬 표현을 반환합니다. 필드가 필요한 경우가 아니면 ValidationError가됩니다.
  4. 값이 비어 있지 않으면 캐스팅과 함께 파이썬 유형으로 진행합니다.
  5. 그러면 반환 값이 모델이나 양식에 연결됩니다.

포인트 3에. forms.CharFieldforms.DateTimeField은 다르게 동작합니다. CharField은 빈 값을 찾고 빈 문자열 인 ''을 반환하지만 DateTimeFieldNone을 반환합니다. model.DateTimeField의 올바른 공백 값은 ''이 아닌 None입니다.

장고는 예외가 발생 이유

: 그것은 DateTimeField에 대해 유효한 빈 값으로 ''을 인식하지 못하기 때문에, 당신은 models.DateTimeField''을 할당하려는, 후자는 날짜에 제대로 캐스팅 수 없기 때문에 .

어떻게 작동하는지 더 잘 이해하려면 Django's source code을 볼 수 있으며 사용자 정의 필드를 작성하는 경우 documentation을, form and field validation에도 볼 수 있습니다.

관련 문제