2010-02-13 3 views
0

내 형태의 ChoicesField을 사용하고 있습니다,하지만 난 이런 식의 분할을 데려 가고 싶다는 : Django Choices 필드 분배기?

COUNTRIES = (
    ('CA', _('Canada')), 
    ('US', _('United States')), 
    (None, _('---')), # <---------- 
    ('AF', _('Afghanistan')), 
    ('AX', _('Aland Islands')), 
    ('AL', _('Albania')), 
    ('DZ', _('Algeria')), 
    ('AS', _('American Samoa')), 
    # ... 

class AddressForm(forms.Form): 
    country = forms.ChoiceField(choices=COUNTRIES, initial='CA') 

가이 선택할 수없는 만들거나 적어도 사용자 후비는 경우 오류를 제공하기 위해 무엇을 가장 쉬운 방법입니다 그것?

답변

1

구분 기호가 선택되어 있으면 유효성 검사 오류를 발생시키는 클린 메서드를 작성할 수 있습니다. 내가 사용하는 장고의 버전을 모르는

COUNTRIES = [ 
    ("CA", _("Canada")), 
    ("US", _("United States")), 

    # This format will indent the nested tuples over and the 
    # "-----" will be un-selectable 
    # 
    ("---------------", (# This will be a header for the items nested below 
     ("AF", _("Afghanistan")), 
     ('AX', _('Aland Islands')), 
     ('AL', _('Albania')), 
     ('DZ', _('Algeria')), 
     ('AS', _('American Samoa')), 


     ) 
    ), 
] 
1

이 사용할 수 있습니다. (1) 나는 다음과 같은 사용 :

ICONS = (
    (None,      ''), 
    (None,      '==Extra Contact Info=='), 
    ('phone',     'Phone'), 
    ('phone',     'Phone (square)'), 
    ('fax',      'Fax'), 
    ('envelope',    'E-mail (black)'), 
    ('envelope-o',    'E-mail (white/clear)'), 
    (None,      ''), 
    (None,      '==Social Media=='), 
    ('facebook',    'Facebook'), 
    ('facebook-official',  'Facebook (official)'), 
    ('facebook-square',   'Facebook (square)'), 
    ('google-plus',    'Google Plus'), 
    ... 
) 

그리고 내가 사용하는 모든, 그리고를 사용자가 임의의 목록 항목을 선택하면 드롭 다운 메뉴에 'None'값이 있으면 사용자에게 "이 필드가 필요합니다."라는 메시지가 나타납니다.

이제 내 프로젝트에서 물론 선택 목록이 내 whatever.com/admin 페이지에서 사용되고 있지만 관련이 없습니다. 그러나 관련성이있는 것은 모델 (또는 양식) 클래스 필드에 "blank = True"가 포함되지 않아야한다는 것입니다. 기본적으로 생략하면 false 여야합니다. 즉, 필드는 null 또는 빈 문자열 값을 허용하지 않습니다. 그게 니가 필요로하는 모든 것일거야 ...

+0

나는 다른 것들이 들여 쓰기를 원했을 것이라고 생각하지 않는다. – mpen

+1

나는 솔직히 그들이 들여 쓰이지 않았 더라면 좋겠지 만, 선택 할수없는 헤더를 만들고 들여 쓰지 않는 방법을 발견하지 못했다. 이 메서드에 대한 유효성 검사 논리를 작성할 필요가 없다는 점이 좋습니다. 아마도 그것들을 부딪 치기 위해 사용될 수있는 어떤 종류의 CSS 규칙이 있을까요? – Spartacus

1

을,하지만 난 1.10 오전 : https://docs.djangoproject.com/en/dev/ref/models/fields/#field-choices

당신은 다음과 같은 포맷 것이다 :

class AddressForm(forms.Form): 
    country = forms.ChoiceField(choices=COUNTRIES, initial='CA') 

    def clean_country(self): 
    data = self.cleaned_data["country"] 
    if not data: 
     raise forms.ValidationError("You must select a valid country.") 
    return data