Django 设置动态选择字段的默认值
我有一个表单,要求用户输入他们的邮政编码。一旦他们这样做了,它会将他们发送到另一个表单,其中有一个名为“皮卡日期”的字段。这将从上一个字段中获取zip的值,并将与该邮政编码匹配的所有可用取货日期获取到ChoiceField中。我在模型表单的init中设置了所有这些Django 设置动态选择字段的默认值,django,django-forms,Django,Django Forms,我有一个表单,要求用户输入他们的邮政编码。一旦他们这样做了,它会将他们发送到另一个表单,其中有一个名为“皮卡日期”的字段。这将从上一个字段中获取zip的值,并将与该邮政编码匹配的所有可用取货日期获取到ChoiceField中。我在模型表单的init中设置了所有这些 def __init__(self,*args,**kwargs): super(ExternalDonateForm,self).__init__(*args,**kwargs) if kwargs:
def __init__(self,*args,**kwargs):
super(ExternalDonateForm,self).__init__(*args,**kwargs)
if kwargs:
zip = kwargs['initial']['zip']
self.fields['pickup_date'] = forms.ChoiceField(choices = self.get_dates(zip))
elif self.errors:
zip = self.data['zip']
self.fields['pickup_date'] = forms.ChoiceField(choices = self.get_dates(zip))
我的问题是当表单上有其他错误时。我使用
elif self.errors
重新生成可能的选项,但它不会默认为原始选择的选项。它返回并默认为第一个选项。我怎样才能使表单错误的默认选项是最初发布的内容?将self.fields['picku\u date']更改为self.fields['picku\u date']。初始设置,看看是否有帮助。我在玩了一段时间后让它开始工作。上面,我使用返回元组的get_dates()函数设置所有动态选项。我没有这样做,而是使用自定义的而不是常规的ChoiceField返回了这样的field对象
class MyModelChoiceField(ModelChoiceField):
def label_from_instance(self, obj):
return obj.date.strftime('%a %b %d, %Y')
日期函数
def get_dates(self,zip):
routes = Route.objects.filter(zip=zip).values_list('route',flat=True)
pickups = self.MyModelChoiceField(queryset = PickupSchedule.objects.filter(
current_count__lt=F('specials'),
route__in=routes,
).order_by('date')
)
if not pickups:
pickups = (('----','No Pickups Available At This Time'),)
return pickups
在init中,我设置了self.fields['picku\u date']
的值,如下所示
self.fields['pickup_date'] = self.get_dates(zip)
无骰子-在这两种情况下,从表单中移除标记并返回到Char字段中