๋ณ๋๋ก ๋ค์ ๋ฐฉ๋ฒ์ ์๋ํ์ฌ ์์์ ์ด๊ธฐ ๊ฐ์ ์ ๋ฌํ๋ ค๊ณ ํ์ต๋๋ค(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-filter๋ฅผ ์ฌ์ฉํ ๋ ์์์ ์ด๊ธฐ ๊ฐ์ ์ด๋ป๊ฒ ์ค์ ํ ์ ์์ต๋๊น?
์ด๊ฒ๋ ๊ถ๊ธํฉ๋๋ค. ๋ค๋ฅธ Filter, FilterSet ๋ฐ Form ๊ฐ์ฒด๋ฅผ ์ดํด๋ณด์์ง๋ง ์ ์ ํ ๋ฐฉ๋ฒ์ ์ฐพ์ง ๋ชปํ์ต๋๋ค. ๋ฐ์ดํฐ ์์ฒด๋ฅผ ์ ๋ฌํ๋ ์ข์ ๋ฐฉ๋ฒ์ ์ฐพ์ง ๋ชปํ์ง๋ง ๋ฐ์ธ๋ฉ๋ ์์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ initial์ด ์๋ํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. 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>
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ChoiceField์ ๊ฒฝ์ฐ ๋ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
empty_label=None, null_value=<default-value>, null_label=<default-label>