如何向选择小部件添加空白默认选项?

时间:2013-06-03 15:29:32

标签: django django-forms django-widget

我正在尝试为我维护的数据库创建一个搜索页面,方法是创建一个动态维护的选择框,其中包含我的一些字段的所有唯一值。

经过大量时间和思考后,我决定为我的数据库创建搜索表单的最佳方法是在视图中执行此操作,从而产生与此类似的内容:

search_form = modelform_facotry(my_model,
                                fields=('field_one', 'field_two',),
                                widgets={'field_one': Select(choices=((datum.field_one, datum.field_one) for datum in my_model.objects.distinct('field_one'))),
                                         'field_two': Select(choices=((datum.field_two, datum.field_two) for datum in my_model.objects.distinct('field_two'))),
                                }
)

这很棒!除了我无法弄清楚如何包含空白选项...必须在这样的循环中创建选项,所以我不能像许多解决方案所暗示的那样添加空白选项。

我已经把头发拉了一段时间了,因为看起来像选择一个小部件的空白选项似乎很容易解决,但显然不是。任何帮助将不胜感激。

编辑:我应该添加我的字段都是CharFields

1 个答案:

答案 0 :(得分:1)

在玩了一会儿之后,我发现了我需要做的事情:

FIELD_ONE_CHOICES = (('', '-----'),)
for datum in my_model.objects.distinct('field_one'):
    FIELD_ONE_CHOICES += ((datum.field_one, datum.field_one),)
FIELD_TWO_CHOICES = (('', '-----'),)
for datum in my_model.objects.distinct('field_two'):
    FIELD_TWO_CHOICES += ((datum.field_two, datum.field_two),)

search_form = modelform_factory(my_model,
                                fields=('field_one', 'field_two'),
                                widgets={'field_one': Select(choices=FIELD_ONE_CHOICES),
                                         'field_two': Select(choices=FIELD_TWO_CHOICES),
                                }
)

元组可能令人沮丧...