Django-filter: Передача начального значения

Созданный на 28 авг. 2014  ·  5Комментарии  ·  Источник: carltongibson/django-filter

Я попытался передать начальное значение в форму, по отдельности попробовав следующие методы (yadda является значением-заполнителем):

#views.py
def operator_search(request):
    operators = Operator.objects.all()
    f = OperatorFilter(request.GET, initial={'operator_city':'yadda'}, queryset=Operator.objects.all())
    return render(request, 'vendors/operator_search.html', {'filter':f, 'operators':operators})
#forms.py
class OperatorFilter(django_filters.FilterSet):
     operator_city = django_filters.CharFilter(initial="yadda")
     class Meta:
         model = Operator

Ни то, ни другое не работает. Как я могу установить начальное значение для формы при использовании django-фильтров?

Самый полезный комментарий

в случае ChoiceField вы можете использовать:
empty_label=None, null_value=<default-value>, null_label=<default-label>

Все 5 Комментарий

Мне тоже интересно это, я погрузился в различные объекты Filter, FilterSet и Form и не нашел достойного способа сделать это. Я не верю, что initial сработает, потому что он использует связанную форму, хотя я не нашел хорошей работы по передаче самих данных. Я нашел обходной путь через QueryDict и передал его в FilterSet, но должен быть более чистый способ сделать это.

Не могли бы вы опубликовать отрывок из обходного пути? Я как бы застрял на этом этапе, и мои пользователи устали от того, что их поисковые запросы по умолчанию относятся к Афганистану :)

Привет, @chromakey - я думаю, что это вопрос использования, поэтому лучше нацелить его на список рассылки .

Однако данные формы - это просто данные, переданные в FilterSet, поэтому, если я правильно вас понимаю, вы сможете сделать что-то вроде этого:

initial = {'operator_city':'yadda'}
initial.update(request.GET)
f = OperatorFilter(initial, ...)

Если это не так, пожалуйста, продолжите и объясните больше в Списке рассылки . Спасибо.

Я просмотрел список рассылки, но не нашел решения. Вот обходной путь, который я придумал (используйте по своему усмотрению):

 ####### WARNING: this is a hack to enable initial filter field selection in django-filters########
# Create a mutable QueryDict object, default is immutable
initial = QueryDict('active_study=True', mutable=True)
# QueryDict update works different than normal dictionary update. Refer to docs.
initial.update(request.GET)
# Place the hacked, mutable QueryDict to the FilterSet.
filter = StudyFilter(initial, queryset=Study.objects.all())

в случае ChoiceField вы можете использовать:
empty_label=None, null_value=<default-value>, null_label=<default-label>

Была ли эта страница полезной?
0 / 5 - 0 рейтинги