Django-filter: Passando um valor inicial

Criado em 28 ago. 2014  ·  5Comentários  ·  Fonte: carltongibson/django-filter

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?

Comentários muito úteis

no caso de ChoiceField você pode usar:
empty_label=None, null_value=<default-value>, null_label=<default-label>

Todos 5 comentários

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>

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

madelyneriksen picture madelyneriksen  ·  4Comentários

nhuzaa picture nhuzaa  ·  3Comentários

xtrinch picture xtrinch  ·  4Comentários

edmorley picture edmorley  ·  3Comentários

sassanh picture sassanh  ·  4Comentários