2011-11-15 2 views
2

모델에 CharField withchoices이 있었지만이 필드 렌더링을 위해 양식 클래스에 목록을 반환하는 CheckboxSelectMultiple으로 렌더링해야합니다. TypedChoiceField 양식 클래스는 자동으로 Field에 할당되며 선택 사항은 유효하지 않습니다. 필드에서 form_class을 변경하고 목록을 확인하기 위해 TypedMultipleChoiceFieldform_class이라는 새 필드를 작성했습니다.TypedChoiceField를 양식 필드로 지정하여 모델 필드에 선택 항목을 어떻게 할당합니까?

class MultipleTypedChoiceModelField(models.Field): 
    def get_internal_type(self): 
     return 'MultipleTypedChoiceModelField' 

    def formfield(self, **kwargs): 
     defaults = {'form_class': TypedMultipleChoiceField, } 
     defaults.update(kwargs) 
     return super(MultipleTypedChoiceModelField, self).formfield(**defaults) 

그러나 효과가 없습니다. 모델 필드에서 선택 사항을 주석 처리 한 경우 유형은 MultipleTypedChoiceModelField입니다. 그래서 form_class는 선택 목록의 목록으로 어플라이언스에서 임명되었다고 생각한다.

def formfield(self, **kwargs): 
    if self._choices: # or self.choices: 
     defaults = {'form_class': TypedMultipleChoiceField, } 
     defaults.update(kwargs) 
    return super(MultipleTypedChoiceModelField, self).formfield(**defaults) 

하지만 효과가 없습니다. form_class의 배정 위치를 찾지 못했습니다. 어쩌면 나는이 행동을 바꾸는 더 좋은 방법이 있을까? 많은 관계가 많은 추가 모델을 추가하는 것은 분명히 필요하지 않기 때문에 계획하지 않습니다.

myfield = models.CharField(max_length=100, choices=MY_FIELD_CHOICES) 

장고가 myfield을 가정하는 것입니다 단지 선택, 너트 여러 선택을 원하는 분야 문제의

답변

1

부분은 당신이 당신의 모델이 같은 뭔가가있는 경우이다.

이 당신의 모델이 뭔가를하는 것입니다 구현하는

가장 쉬운 방법 : 사용자 지정 양식에 다음

myfield = models.CharField(max_length=100) 

과 :

myfield = forms.MultipleChoiceField(choices=MY_FIELD_CHOICES, widget=forms.CheckboxSelectMultiple()) 
관련 문제