2012-02-14 74 views
1

我正在填充在Django形式的选择,Django的窗体缓存填充形式

的问题是,当我在浏览器中看到的那样,今年的榜单是根据数据库的罚款,但是当我改变数据库中的某个日期,年份选择列表不会更新。

class PlanForm(forms.Form): 

    def get_prices(): 
     return forms.ChoiceField(choices=map(lambda x: (x.pk, unicode(x.length) + _(' Day Listing/') + unicode(x.pics) + _(' Photos: ') + _('$ ') + unicode(x.price) ), Pricing.objects.filter(enable=True,site=settings.SITE_ID)),label=_('Plans'), widget=forms.RadioSelect) 

    def get_options(): 
     return forms.MultipleChoiceField(choices=map(lambda x: (x.pk, unicode(x) + _(' : $') + unicode(x.price)), PricingOptions.objects.filter(enable=True,site=settings.SITE_ID)),label=_('Ads Options'), widget=forms.CheckboxSelectMultiple, required=False) 

    def __init__(self, *args, **kwargs): 
     print 'passou no init' 
     super(PlanForm, self).__init__(*args, **kwargs) 
     self.fields['pricing'] = self.get_prices() 
     self.fields['pricing_options'] = self.get_options() 


    pricing = get_prices() 
    pricing_options = get_options() 

我试试这个代码,但我得到的错误

get_prices()不带任何参数(1给出)

我怎么能SOVE呢?

回答

0

类方法(例如get_prices)至少需要一个参数self,该参数将被调用该方法的类实例填充。

0

@staticmethod修饰符添加到您的方法中。默认情况下,Python假定函数在类中作为方法被defiened,并将“self”作为第一个参数传递。 staticmethod可防止此默认行为。

class PlanForm(forms.Form): 

    @staticmethod 
    def get_prices(): 
     return forms.ChoiceField(choices=map(lambda x: (x.pk, unicode(x.length) + _(' Day Listing/') + unicode(x.pics) + _(' Photos: ') + _('$ ') + unicode(x.price) ), Pricing.objects.filter(enable=True,site=settings.SITE_ID)),label=_('Plans'), widget=forms.RadioSelect) 

    @staticmethod 
    def get_options(): 
     return forms.MultipleChoiceField(choices=map(lambda x: (x.pk, unicode(x) + _(' : $') + unicode(x.price)), PricingOptions.objects.filter(enable=True,site=settings.SITE_ID)),label=_('Ads Options'), widget=forms.CheckboxSelectMultiple, required=False) 

    def __init__(self, *args, **kwargs): 
     print 'passou no init' 
     super(PlanForm, self).__init__(*args, **kwargs) 
     self.fields['pricing'] = self.get_prices() 
     self.fields['pricing_options'] = self.get_options() 


    pricing = get_prices() 
    pricing_options = get_options() 
0

试试:

class PlanForm(forms.Form): 

    def __init__(self, *args, **kwargs): 
     print 'passou no init' 
     super(PlanForm, self).__init__(*args, **kwargs) 
     self.fields['pricing'] = forms.ChoiceField(choices=map(lambda x: (x.pk, unicode(x.length) + _(' Day Listing/') + unicode(x.pics) + _(' Photos: ') + _('$ ') + unicode(x.price) ), Pricing.objects.filter(enable=True,site=settings.SITE_ID)),label=_('Plans'), widget=forms.RadioSelect) 
     self.fields['pricing_options'] = forms.MultipleChoiceField(choices=map(lambda x: (x.pk, unicode(x) + _(' : $') + unicode(x.price)), PricingOptions.objects.filter(enable=True,site=settings.SITE_ID)),label=_('Ads Options'), widget=forms.CheckboxSelectMultiple, required=False) 
+0

工作,但会调用init内get_prices方法? – 2012-02-14 13:33:13