Tentei passar um valor inicial para o formulário tentando separadamente os seguintes métodos (yadda sendo um valor de espaço reservado):
#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
Nenhum dos dois parece funcionar. Como posso definir um valor inicial para o formulário ao usar filtros django?
Também estou me perguntando isso, mergulhei nos diferentes objetos Filter, FilterSet e Form e não encontrei uma maneira decente de fazer isso. Não acredito que o initial funcione porque está usando um formulário vinculado, embora não tenha encontrado um bom trabalho para passar os dados em si. Eu encontrei uma solução alternativa por meio do QueryDict e passando-a para o FilterSet, mas deve haver uma maneira mais limpa de fazer isso.
Você se importaria de postar um trecho de sua solução alternativa? Estou meio preso neste ponto e meus usuários estão cansados de ter suas pesquisas padrão no Afeganistão :)
Olá @chromakey - Acho que esta é uma questão de uso, então é melhor direcionada à Lista de Discussão .
No entanto, os dados do formulário são apenas aqueles passados para o FilterSet, então, se bem entendi, você deve ser capaz de fazer algo assim:
initial = {'operator_city':'yadda'}
initial.update(request.GET)
f = OperatorFilter(initial, ...)
Se não for esse o caso, acompanhe e explique mais na Lista de Discussão . Obrigado.
Procurei na lista de mala direta, mas não consegui encontrar uma solução. Aqui está uma solução alternativa que descobri (use a seu próprio critério):
####### 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())
no caso de ChoiceField você pode usar:
empty_label=None, null_value=<default-value>, null_label=<default-label>
Comentários muito úteis
no caso de ChoiceField você pode usar:
empty_label=None, null_value=<default-value>, null_label=<default-label>