Django-filter: تمرير قيمة أولية

تم إنشاؤها على ٢٨ أغسطس ٢٠١٤  ·  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؟

التعليق الأكثر فائدة

في حالة 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 التقييمات