2011-06-21 86 views
7

下面顯示的不是我模板中的字段。django localflavors US

<django.contrib.localflavor.us.forms.USStateSelect object at 0x92b136c> 

我的模板有

{{ form.state }} 

什麼可能的問題是什麼?

class RegistrationForm(forms.Form): 

    first_name = forms.CharField(max_length=20) 
    last_name = forms.CharField(max_length=20) 
    phone = USPhoneNumberField() 
    address1 = forms.CharField(max_length=45) 
    address2 = forms.CharField(max_length=45) 
    city = forms.CharField(max_length=50) 
    state = USStateSelect() 
    zip = USZipCodeField() 

也有反正我可以使國家和郵政可選?

+0

你可以發佈你的表單類的代碼嗎? –

+0

查看eidts謝謝 – Eva611

回答

9

要將選項限制爲下拉列表,請在模型中使用us.us_states.STATE_CHOICES,並在表單中使用us.forms.USStateField()而不是us.forms.USStateSelect()

要使表單中的字段可選,請將blank = True添加到模型中的該字段。

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

class ExampleLocation(models.Model): 
    address1 = models.CharField(max_length=45) #this is not optional in a form 
    address2 = models.CharField(max_length=45, blank = True) #this is made optional 
    state = USStateField(choices = STATE_CHOICES) 

相反的STATE_CHOICES,還有你可以找到in the localflavor documentation幾個選項。 STATE_CHOICES是最包容的,但這可能不是你想要的。如果您只想要50個州,加上DC,請使用US_STATES


此答案假定您正在使用ModelForms。如果你不是,你應該。一旦你做了你的模型,你應該遵循DRY創造基本形式,像這樣:

from django.forms import ModelForm 

class ExampleForm(ModelForm): 
    class Meta: 
     model = ExampleLocation 

它從你的模型繼承你的領域。您可以自定義哪些字段可用,如果您不需要整個模型,可以使用其他class Meta選項,如fieldsexclude。模型形式與其他任何形式一樣可定製,他們只是從模型領域的假設開始。

+0

當我使USStateField爲可選時,它會拋出錯誤 – Eva611

+0

您是否在* model *或* form *中使USStateField爲可選項?如果這只是一種形式,並且不與模型關聯,則在表單中使用'required = False',而不是'blank = True'。請記住,如果模型中沒有'blank = True',並且嘗試添加沒有該字段的新條目,則會收到錯誤消息。 –

+1

如果它不顯示美國州選擇的下拉列表,它爲什麼稱爲USStateSelect?或者我錯過了什麼。 – Chris