2012-03-11 1 views
0

모델에 정수 필드가 있습니다. 이 필드의 값의 의미는 "1.1.1970 이후의 일"입니다. 따라서 날짜를 쉽게 선택할 수 있도록 AdminDateWidget을 사용하는 날짜로 관리 인터페이스에 표시하고 싶습니다. 내가 다 괜찮 관리자 날짜를 표시하고있을 때Django에서 사용자 정의 값을 가진 사용자 정의 위젯

class LdapUserAdminForm(forms.ModelForm): 
    class Meta: 
     widgets = { 
      'shadow_expire': ExpireWidget 
      } 

:

class ExpireWidget(AdminDateWidget): 
    def render(self, name, value, attrs=None): 
     if isinstance(value, (int, long)): 
      value = datetime.date(1970, 1, 1) + datetime.timedelta(value) 
     return super(ExpireWidget, self).render(name, value, attrs) 

그리고 다음 코드 admin.py에서 :

내 유일한 생각은 지금까지 정수를 번역 할 수있는 새로운 위젯을 만드는 것입니다 ,하지만 그것을 저장하기 전에 날짜를 정수로 변환해야합니다. clean_field_name 함수를 사용하여 달성 할 수 있다고 생각했지만 clean_field_name (일부는 clean()입니까?) 전에 유효성 검사가 수행되고 정수 값을 입력해야한다는 오류가 발생합니다.

유효성 검사 전에 날짜를 int로 어떻게 변환해야합니까?

답변

1

각 위젯은 POST/GET에서 데이터를 다시 가져 와서 해당 데이터를 양식 유효성 검증을 위해 변환하는 메소드를 가지고 있습니다.

그것은 방법 def value_from_datadict(self, data, files, name)

의 당신은 여기에 사용 볼 수 있습니다 Pseudo-form in Django admin that generates a json object on save