Django形成缓存填充表单

时间:2012-02-14 13:25:56

标签: python 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个)

我怎么能这个?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

@staticmethod装饰器添加到您的方法中。 Python默认假定在类中定义的函数作为方法,并将'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()

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