Django-filter: 初期値を渡す

作成日 2014年08月28日  ·  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-filtersを使用するときにフォームの初期値を設定するにはどうすればよいですか?

最も参考になるコメント

ChoiceFieldの場合、次のものを使用できます。
empty_label=None, null_value=<default-value>, null_label=<default-label>

全てのコメント5件

これも不思議に思っています。さまざまなFilter、FilterSet、Formオブジェクトを調べましたが、これを行うための適切な方法が見つかりませんでした。 データ自体を渡すことを回避する良い方法は見つかりませんでしたが、バインドされたフォームを使用しているため、イニシャルが機能するとは思いません。 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 評価