django - 在从数据库表自动生成的select语句中插入自定义选项

时间:2011-01-30 13:31:16

标签: django django-templates django-forms django-views

我有一个下拉(选择)表单,用于从数据库表中提取选择选项。选项几乎一直在变化,具体取决于某个变量。

我需要在下拉列表的底部添加一个选项,它始终是相同的。会说“更多选择”的东西。有任何想法吗?谢谢!

2 个答案:

答案 0 :(得分:2)

这很容易通过覆盖您正在使用的Form子类上的__init__来实现。它也应该在ModelForm上同样有效。我不确定你是如何基于这个问题填充选择的。

class ChoiceForm(Form):                                                         
    choice = ModelChoiceField(queryset=MyModel.objects.all())                    

    def __init__(self, *args, **kw):                                            
        super(ChoiceForm, self).__init__(*args, **kw)                           

        # Add to choices iterator                                               
        choice_field = self.fields['choice']                                    
        choice_field.choices = list(choice_field.choices) + [(0, 'More Options')]

使用<p>标记进行渲染时,会显示以下内容:

<p>
    <label for="id_choice">Choice:</label> 
    <select name="choice" id="id_choice">
        <option value="" selected="selected">---------</option>
        <option value="0">More Options</option>
    </select>
</p>

但请注意,此字段选项将在您创建后修复。如果您传递的查询集的结果将被更改,则正常的ModelChoiceField将自动更新其选择。

答案 1 :(得分:0)

我会这样解决: 1-按目前的方式渲染选择框 2-创建两个隐藏的选择框,1选择有限,另一个选择完整列表 3-当用户点击“更多选项”按钮时,所有选项都被刷新,并且将使用完整选择框中的选项重新填充它。 4-作为选项,您可能希望用户返回“更少的选项”,在这种情况下,您只需要再次刷新选项并从隐藏的选择框中加载有限的选项。

为了达到这个目的,你只需要模板来渲染2个选择框(少选择和更多选项)和style =“display:none”css属性,然后编写js按钮点击事件(I通常会在jQuery中进行切换。

希望它有所帮助,只需询问您是否需要一些代码示例