2013-06-03 2 views
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'))), 
           } 
) 

это работает Великий! За исключением того, что я не могу понять, как включить пустой параметр ... Выбор должен быть создан в таком цикле, поэтому я не могу просто добавить пустой выбор, как предлагают многие решения.

Я уже давно вытягиваю волосы из-за этого, потому что кажется, что добавление пустой опции к избранному виджету будет простым исправлением, но, очевидно, нет. Любая помощь будет оценена по достоинству.

Edit: Я хотел бы добавить, что мои поля все CharFields

ответ

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

кортежей может быть неприятно ...

Смежные вопросы