【问题标题】:How do I add a blank default option to a select widget?如何向选择小部件添加空白默认选项?
【发布时间】:2013-06-03 15:29:31
【问题描述】:

我正在尝试通过为我的一些字段的所有唯一值创建一个动态维护的选择框来为我正在维护的数据库创建一个搜索页面。

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

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

【问题讨论】:

    标签: django django-forms django-widget


    【解决方案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),
                                    }
    )
    

    元组可能令人沮丧...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多