次の方法を個別に試して、フォームに初期値を渡そうとしました(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を使用するときにフォームの初期値を設定するにはどうすればよいですか?
これも不思議に思っています。さまざまなFilter、FilterSet、Formオブジェクトを調べましたが、これを行うための適切な方法が見つかりませんでした。 データ自体を渡すことを回避する良い方法は見つかりませんでしたが、バインドされたフォームを使用しているため、イニシャルが機能するとは思いません。 QueryDictを介して回避策を見つけ、それをFilterSetに渡しましたが、これを行うためのよりクリーンな方法が必要です。
回避策のスニペットを投稿していただけませんか? 私はこの時点でちょっと立ち往生していて、私のユーザーは検索がデフォルトでアフガニスタンになっていることにうんざりしています:)
メーリングリストを検索しましたが、解決策が見つかりませんでした。 これが私が考え出した回避策です(あなた自身の裁量で使用してください):
####### 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>
最も参考になるコメント
ChoiceFieldの場合、次のものを使用できます。
empty_label=None, null_value=<default-value>, null_label=<default-label>