显示属性地址而不是属性值

时间:2014-06-02 15:15:58

标签: python html django

我尝试创建以下内容。我想要一个下拉菜单。根据第一个下拉菜单中选择的选项,将显示第二个下拉菜单中的选项。第二个下拉菜单中的选项是动态的,即选项随第一个菜单中值的变化而变化。

在这里,我没有获得下拉菜单,而是获得以下内容

Choose your Option1: <django.forms.models.ModelChoiceField object at 0x02FE2C10> 
Choose your Option2: <django.forms.models.ModelChoiceField object at 0x02FE5A90>

注意:我严格不想使用javascript。

home_form.py

class HomeForm(forms.Form):
    def __init__(self, *args, **kwargs):
        var_filter_con = kwargs.pop('filter_con', None)
        super(HomeForm, self).__init__(*args, **kwargs)
        if var_filter_con == '***':
            var_empty_label = None
        else:
            var_empty_label = '    '

        self.option2 = forms.ModelChoiceField(queryset = db_option2.objects.filter(option1_id = var_filter_con).order_by("name"),
                                        empty_label = var_empty_label,
                                        widget = forms.Select(attrs={"onChange":'this.form.submit();'})
                                        )

        self.option1 = forms.ModelChoiceField(queryset = db_option1.objects.all().order_by("name"),
                                        empty_label=None,
                                        widget=forms.Select(attrs={"onChange":'this.form.submit();'})
                                        )

view.py                                     

def option_view(request):
    if request.method == 'POST':
        form = HomeForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            if cd.has_key('option1'):
                f = HomeForm(filter_con = cd.get('option1'))
                return render_to_response('homepage.html', {'home_form':f,}, context_instance=RequestContext(request))
        return render_to_response('invalid_data.html', {'form':form,},  context_instance=RequestContext(request))
    else:
        f = HomeForm(filter_con = '***')
        return render_to_response('homepage.html', {'home_form':f,}, context_instance=RequestContext(request))


homepage.html

<!DOCTYPE HTML>
<head>
    <title>Nivaaran</title>
</head>
<body>
    <form method="post" name = 'choose_opt' action="">
    {% csrf_token %}
        Choose your Option1:
            {{ home_form.option1 }}
        <br/>
        Choose your Option2:
            {{ home_form.option2 }}
    </form>
</body>

2 个答案:

答案 0 :(得分:2)

我认为你必须像这样设置option1和option2:

self.fields['option2']=forms.ModelChoiceField(...
self.fields['option1']=forms.ModelChoiceField(...

答案 1 :(得分:0)

我不是以这种方式做form,而是建议另一种方法:

class HomeForm(forms.Form):
     option1 =  forms.ChoiceField(attrs={"onChange":'this.form.submit();'})
     option2 =  forms.ChoiceField(attrs={"onChange":'this.form.submit();'})
     def __init__(self, *args, **kwargs):
        var_filter_con = kwargs.pop('filter_con', None)
        super(HomeForm, self).__init__(*args, **kwargs)
        if var_filter_con == '***':
            var_empty_label = None
        else:
            var_empty_label = '    '

        self.fields['option1'].choices =  db_option1.objects.filter(option1_id = var_filter_con).order_by("name")

        self.fields['option2'].choices =  db_option2.objects.filter(option1_id = var_filter_con).order_by("name")

希望它会有所帮助。

相关问题