我正在填充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个)
我怎么能这个?
答案 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)