首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Django填充下拉列表?

如何在Django填充下拉列表?
EN

Stack Overflow用户
提问于 2016-09-18 08:49:21
回答 1查看 238关注 0票数 0

我想使用Django构建一个简单的视图。将出现“customer site's”的下拉列表,然后在选择了一个客户站点后,视图将填充以前选定客户的竞争者的下拉列表。我的问题是第二部分:当我从第一个下拉列表中选择客户并按‘选择’时,页面重新加载,但竞争者下拉列表为空:

我调试了代码,并为竞争者返回了值下拉列表,它们是正确的。我有一个观点:

代码语言:javascript
复制
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变量表示的对象中的下拉列表。

知道我在这里做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-18 09:25:52

在您的表单中,self.competitors_site_ids与此无关。您需要分配给self.fields['competitors_site_ids']

而且,这段代码应该在__init__中,而不是单独的方法中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39555782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档