2016-06-08 4 views
1

나는 해당 formset 및 각 양식은 초기 값에 제출 한이 포함되어 있습니다장고 - 해당 formset : ingore 형태 contaning 만 초기 값

class IssueForm(forms.Form): 

    date_of_issue = forms.DateField(
      initial=date.today().strftime("%d.%m.%Y"), 
      widget=forms.TextInput(attrs={ 
       'placeholder': date.today().strftime("%d.%m.%Y"), 
       'class': 'form-control', 
      }), 
      localize=True, 
      required=True) 

이제 사용자가 표시 10 개 여분의 형태를 얻을 수 있지만, 어쩌면 그/그녀는 단지 5 채 웁니다 그들의. 이제 date_of_issue 필드가 필요하므로 formSet을 제출 한 후 다시 표시되고 사용자가 채워지지 않은 5 행을 표시합니다.

나는 필드에 대해 내 자신의 청소 기능을 추가하려고하지만,이 길을 가야하는 것입니다 모르겠어요 :

def clean_date_of_issue(self): 
    if len(self.cleaned_data) == 1 and 'date_of_issue' in self.cleaned_data: 
     self.cleaned_data = dict() 
     return None 
    return self.cleaned_data['date_of_issue'] 
+0

현재 사용중인 정리 기능의 결과는 어떻게됩니까? 그게 뭐가 잘못 됐어? –

+0

@ HåkenLid 폼이 다시 표시되고 하나의 채워진 필드 (초기 값이있는 date_of_issue)가있는 폼은 "채워야 함"으로 표시됩니다 (폼의 다른 필드가 필요함). 나는 깨끗한 기능이 갈 길인지 모른다. – Fabian

+0

나는 본다. 난 당신이 장고 양식 프레임 워크의 편의를 많이 잃는 것을 발견하면 사소한 오버라이드 방법과 기능을 시작합니다. 이 경우 placeholder를 삭제하거나 클라이언트 측 솔루션을 찾으십시오. 자바 스크립트 "오늘"버튼을 눌러 날짜를 기입하십시오. 또는 제출시 formets의 유효성을 미리 확인하고 'date_of_issue'만 채워진 하위 양식을 필터링하는 javascript 함수. –

답변

0

들으 @의 håken 뚜껑 코드에 나를 밀어. 나는 처음부터 그것을 했어야했다.

결국 나는 트릭을 어떻게했는지 모른다. 나는 대부분의 깨끗한 기능을 덮어 썼고 유효성 검사의 수준에서 오류를 확인했다. (읽기.)

한 가지는 show_hidden_initial이다.

class IssueForm(forms.Form): 
    # ... 

    date_of_issue = forms.DateField(
      initial=date.today().strftime("%d.%m.%Y"), 
      show_hidden_initial=True, 
      widget=forms.TextInput(attrs={ 
       'placeholder': date.today().strftime("%d.%m.%Y"), 
       'class': 'form-control, datepicker', 
      }), 
      localize=True, 
      required=True) 

또 다른 방법은 양식 청소 기능을 덮어이고 오류 (안 정말 좋은 솔루션) 제거 :

을이 형태는 초기 값이 변경되지 않았 음을 인식하는 데 필요한 것 같다
class IssueForm(forms.Form): 
    # ... 

    def clean(self): 
     cleaned_data = super(IssueForm, self).clean() 

     # get all non default fields 
     not_default_fields = [value for key, value in cleaned_data.items() if key not in ('date_of_issue', 'issuer')] 

     if any(not_default_fields) is False and 'value' in self.errors: 
      # remove the error if it's the only one 
      self.errors.pop('value') 

     return cleaned_data 

처음에는 예상대로 작동하지 않았지만 지금은 작동하지 않는 이유를 모르지만 ...