0

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

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

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

4

1 回答 1

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),
                                }
)

元组可能令人沮丧...

于 2013-06-04T14:55:50.690 回答