我想使用Django构建一个简单的视图。将出现“customer site's”的下拉列表,然后在选择了一个客户站点后,视图将填充以前选定客户的竞争者的下拉列表。我的问题是第二部分:当我从第一个下拉列表中选择客户并按‘选择’时,页面重新加载,但竞争者下拉列表为空:
我调试了代码,并为竞争者返回了值下拉列表,它们是正确的。我有一个观点:
def index_unify_brands(request):
class CustomerSiteDropDown(forms.Form):
customer_site_id = forms.ChoiceField(Site.objects.filter(site_type='customer').exclude(
crawl_groups='').values_list('id', 'site_name').order_by('site_name'), required=True)
class OptionsForm(forms.Form):
competitors_site_ids = forms.ChoiceField()
def populate_competitors_in_dropdown(self,customer_site_id):
competitors_ids = get_competitors_positions(customer_site_id)[
customer_site_id].keys() # todo: if no competitors
print competitors_ids
competitors_for_dropdown = Site.objects.filter(id__in=competitors_ids).exclude(crawl_groups='') \
.values_list('id', 'site_name').order_by('site_name')
print competitors_for_dropdown
self.competitors_site_ids = forms.ChoiceField(competitors_for_dropdown, required=True)
if request.method == 'POST':
# received request for a specific customer site id
customer_dropdown_form = CustomerSiteDropDown(request.POST)
options_form = OptionsForm(request.POST)
options_form.populate_competitors_in_dropdown(int(request.POST['customer_site_id']))
if customer_dropdown_form.is_valid():
return render_to_response('manage/unify_brands/unify_brands.html',
{'customer_dropdown_form': customer_dropdown_form,
'options_form': options_form},
context_instance=RequestContext(request)
)
else:
customer_dropdown_form = CustomerSiteDropDown()
return render_to_response('manage/unify_brands/unify_brands.html',
{'customer_dropdown_form': customer_dropdown_form},
context_instance=RequestContext(request))当我实例化OptionsForm对象时,options_form.populate_competitors_in_dropdown(....)方法似乎不会更改由competitors_site_ids变量表示的对象中的下拉列表。
知道我在这里做错了什么吗?
发布于 2016-09-18 09:25:52
在您的表单中,self.competitors_site_ids与此无关。您需要分配给self.fields['competitors_site_ids']。
而且,这段代码应该在__init__中,而不是单独的方法中。
https://stackoverflow.com/questions/39555782
复制相似问题