django localflavors美国

时间:2011-06-21 03:59:03

标签: django django-templates

以下显示而不是我模板中的字段。

<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()

无论如何我还可以选择状态和zip吗?

1 个答案:

答案 0 :(得分: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)

您可以找到in the localflavor documentation,而不是STATE_CHOICES,而不是STATE_CHOICESUS_STATES是最具包容性的,但可能不是您想要的。如果您只想要50个州,再加上DC,请使用from django.forms import ModelForm class ExampleForm(ModelForm): class Meta: model = ExampleLocation


此答案假设您正在使用ModelForms。如果你不是,你应该。一旦你制作了模型,就应该遵循DRY并创建基本形式,如下所示:

class Meta

它继承了模型中的字段。如果您不想要整个模型,可以使用fieldsexclude等其他{{1}}选项自定义可用的字段。模型表单可以像任何其他表单一样自定义,它们只是从模型字段的假设开始。