Django-filter: Melewati nilai awal

Dibuat pada 28 Agu 2014  ·  5Komentar  ·  Sumber: carltongibson/django-filter

Saya telah mencoba meneruskan nilai awal ke formulir dengan secara terpisah mencoba metode berikut (yadda menjadi nilai placeholder):

#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

Tidak ada yang berfungsi. Bagaimana saya bisa menetapkan nilai awal untuk formulir saat menggunakan Django-filters?

Komentar yang paling membantu

dalam hal ChoiceField Anda dapat menggunakan:
empty_label=None, null_value=<default-value>, null_label=<default-label>

Semua 5 komentar

Saya bertanya-tanya ini juga, saya menyelami objek Filter, FilterSet, dan Form yang berbeda dan tidak menemukan cara yang layak untuk melakukan ini. Saya tidak percaya inisial akan berfungsi karena menggunakan formulir terikat, meskipun saya tidak menemukan pekerjaan yang baik untuk melewatkan data itu sendiri. Saya menemukan solusi melalui QueryDict dan meneruskannya ke FilterSet tetapi harus ada cara yang lebih bersih untuk melakukan ini.

Maukah Anda memposting cuplikan solusi Anda? Saya agak terjebak pada titik ini dan pengguna saya lelah karena pencarian mereka default ke Afghanistan :)

Hai @chromakey — Saya pikir ini adalah pertanyaan penggunaan jadi lebih baik ditujukan ke Milis .

Namun, data formulir hanya diteruskan ke FilterSet, jadi jika saya memahami Anda dengan benar, Anda seharusnya dapat melakukan sesuatu seperti ini:

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

Jika tidak, silakan tindak lanjuti dan jelaskan lebih lanjut di Milis . Terima kasih.

Saya mencari di milis tetapi tidak dapat menemukan solusi. Berikut adalah solusi yang saya temukan (gunakan sesuai kebijaksanaan Anda sendiri):

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

dalam hal ChoiceField Anda dapat menggunakan:
empty_label=None, null_value=<default-value>, null_label=<default-label>

Apakah halaman ini membantu?
0 / 5 - 0 peringkat