2009-12-02 2 views
9

나는 내 모델 중 하나에 장고의 localflavor에서 USStateField()를 사용장고의 USStateField()가 미리 선택된 값을 가질 수 있도록하는 방법은 없나요?

class MyClassForm(forms.ModelForm): 
    class Meta: 
     model = MyClass 

내가 양식을 표시 할 때 필드 "주": 그 클래스에서 양식을 만든 다음

class MyClass(models.Model): 
    state = USStateField(blank=True) 

"Alabama"가 미리 선택된 드롭 다운 상자입니다.

전혀 미리 선택된 값을 표시하지 드롭 다운 상자를 만들 수있는 방법이 있습니까?

답변

9

이 알려진 된 문제가 될 것으로 보인다 (I 티켓인지 모르겠지만 - 나는 거기에 대한 티켓이 아니다 아니라면, file it 한 번 확인 것) :

from django.contrib.localflavor.us.us_states import STATE_CHOICES 
from django.contrib.localflavor.us.forms import USStateField 

class YourModelForm(forms.ModelForm): 
    class Meta: 
     ... 

    YOUR_STATE_CHOICES = list(STATE_CHOICES) 
    YOUR_STATE_CHOICES.insert(0, ('', '---------')) 
    state = USStateField(widget=forms.Select(
      choices=YOUR_STATE_CHOICES)) 

위 코드는 here입니다.

+0

덕분에 많이, 내가 찾고 있었던 일을 이잖아. – MegaBytes

3

나는 수동으로 목록에 ----- 삽입의 생각처럼 정말 않습니다. 필드를 blank = True로 설정하면 비어있는 옵션이 자동으로 선택 목록 맨 위에 표시됩니다. 또한 상태 필드가 프로필에 있고 장고 프로파일을 사용하는 경우 재사용 가능한 응용 프로그램을 수정해야하는 위치에 놓이게됩니다.

import constants 
state = models.CharField(blank=True, max_length=2, choices=constants.STATE_CHOICES) 
:

나는 localflavor/우리가/내 프로젝트에서 constants.py에 us_states.py 다음 models.py에/쉽게 그냥 파일의 contrib에서 STATE_CHOICES 튜플을 복사 클리너 찾기

blank = True 옵션은 목록을 monkeypatch 할 필요없이 예상대로 작동합니다.

다음 해킹은 또한 뷰에 정의 된 두 장고 관리자 및 형태로 작동하는 것 같다
1

:

from django.contrib.localflavor.us.us_states import STATE_CHOICES 
USStateField.choices = STATE_CHOICES 

여기에 일이있는 contrib/localflavor/우리/forms.py의 forms.py 정의가있다이다 선택 항목을 STATE_CHOICES로 정의하는 USStateSelect 위젯. 그러나 contrib/localflavor/us/models.py의 모델은 이러한 선택 사항을 정의하지 않습니다. 이 방법은, 필드의 빈 = TRUE 설정은 선택에서 적절한 빈 첫 번째 항목에 포함되지 않는, 나는 dB/모델/필드/초기화 평을보고 알게되었습니다.

class USStateField(Field): 
    def __init__(self, *args, **kwargs): 
     from us_states import STATE_CHOICES 
     kwargs.setdefault('max_length', 2) 
     kwargs.setdefault('choices', STATE_CHOICES) 
     super(USStateField, self).__init__(*args, **kwargs) 
    # etc. etc. 
+0

http://code.djangoproject.com/ticket/10969도 참조하십시오. –

3

그냥이 고정되어보고 :

또 다른 수정의 contrib/localflavor/우리/models.py을 변경하고 다음과 같이 생성자를 추가하는 것입니다! 또한 localflavornow a third-party package이므로주의 및 설치 한 후 (예를 들어, pip install django-localflavor)는 다음과 같이 사용할 수 있습니다

from localflavor.us.us_states import STATE_CHOICES 
from localflavor.us.models import USStateField 


class MyClass(models.Model): 
    state = USStateField(choices=STATE_CHOICES) 
2

간단한 해결책 :

from localflavor.us.us_states import STATE_CHOICES 


STATE_CHOICES = (('', '---------'),) + STATE_CHOICES