Django-filter: Pasando un valor inicial

Creado en 28 ago. 2014  ·  5Comentarios  ·  Fuente: carltongibson/django-filter

Intenté pasar un valor inicial al formulario probando por separado los siguientes métodos (yadda es un valor de marcador de posición):

#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

Ninguno parece funcionar. ¿Cómo puedo establecer un valor inicial para el formulario cuando utilizo filtros django?

Comentario más útil

en el caso de ChoiceField, puede usar:
empty_label=None, null_value=<default-value>, null_label=<default-label>

Todos 5 comentarios

También me pregunto esto, me sumergí en los diferentes objetos Filter, FilterSet y Form y no encontré una manera decente de hacerlo. No creo que initial funcionará porque está usando un formulario enlazado, aunque no encontré un buen trabajo alrededor de pasar los datos en sí. Encontré una solución a través del QueryDict y la pasé al FilterSet, pero tiene que haber una forma más limpia de hacer esto.

¿Le importaría publicar un fragmento de su solución alternativa? Estoy un poco atascado en este punto y mis usuarios están cansados ​​de tener sus búsquedas predeterminadas en Afganistán :)

Hola @chromakey : creo que esta es una pregunta de uso, por lo que está mejor dirigida a la lista de correo .

Sin embargo, los datos del formulario son solo los que se pasan al FilterSet, por lo que si lo entiendo correctamente, debería poder hacer algo como esto:

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

Si no es así, haga un seguimiento y explique más en la Lista de correo . Gracias.

Busqué en la lista de correo pero no pude encontrar una solución. Aquí hay una solución alternativa que descubrí (use a su propia discreción):

 ####### 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())

en el caso de ChoiceField, puede usar:
empty_label=None, null_value=<default-value>, null_label=<default-label>

¿Fue útil esta página
0 / 5 - 0 calificaciones