2013-01-14 91 views
0

我有一個要求用戶輸入其郵政編碼的表單。一旦他們這樣做,將他們發送到另一個表單,其中有一個名爲'pickup日期'的字段。這會從前一個字段獲取zip的值,並將所有可用的pickup代碼與該郵政編碼匹配到ChoiceField中。我將所有這些設置在模型表格的init之內。設置動態選擇字段的默認值

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重新生成可能的選項,但它不會默認爲原始選定選項。它返回並默認爲第一選擇。我該如何做到這一點,因此它是表單錯誤的默認選項是最初發布的內容?

回答

0

我在玩了一段時間後纔開始工作。上面,我使用返回元組的get_dates()函數設置所有動態選項。相反,這樣做,我又回到這樣的領域對象使用自定義ModelChoiceField而不是常規的ChoiceField ....

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 

的我設定的值self.fields['pickup_date']像這樣..

self.fields['pickup_date'] = self.get_dates(zip) 
1

將self.fields ['pickup _日期']更改爲self.fields ['pickup _日期']。初始並查看是否有幫助。

+0

沒有骰子 - 從表格中刪除