以下显示而不是我模板中的字段。
<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吗?
答案 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_CHOICES
。 US_STATES
是最具包容性的,但可能不是您想要的。如果您只想要50个州,再加上DC,请使用from django.forms import ModelForm
class ExampleForm(ModelForm):
class Meta:
model = ExampleLocation
。
此答案假设您正在使用ModelForms。如果你不是,你应该。一旦你制作了模型,就应该遵循DRY并创建基本形式,如下所示:
class Meta
它继承了模型中的字段。如果您不想要整个模型,可以使用fields
或exclude
等其他{{1}}选项自定义可用的字段。模型表单可以像任何其他表单一样自定义,它们只是从模型字段的假设开始。