Django-filter: Django_filters.BooleanFilter dengan metode dan filter boolean yang diwarisi dari model tidak bekerja dengan cara yang sama.

Dibuat pada 24 Apr 2017  ·  3Komentar  ·  Sumber: carltongibson/django-filter

Saya mengalami masalah bahwa filter boolean yang dibuat oleh Django_filters.BooleanFilter mengharapkan parameter kueri yang berbeda dengan filter boolean yang diwarisi dari model.
Filter Boolean yang diwarisi dari model mengharapkan param benar atau salah, filter yang dibuat oleh BooleanFilter mengharapkan param menjadi:
1 - diterjemahkan menjadi "tidak disetel"
2 - diterjemahkan menjadi "Benar"
3 - diterjemahkan menjadi "Salah"
Perilaku ini membuat tidak jelas bagaimana memproses rest api custom filter dari sisi javascript.

Contoh kode:

model.py:
class TestModel(models.Model): first = models.BooleanField() last = models.BooleanField()
api.py

`impor django_filters
dari rest_framework mengimpor viewset, serializers
dari .models impor TestModel

kelas TestFilter(Django_filters.rest_framework.FilterSet):
first_and_last = django_filters.BooleanFilter(method='first_and_last_filter')
def first_and_last_filter(self, queryset, name, value):
jika nilai==Benar:
kembali queryset.filter(pertama=Benar, terakhir=Benar);
kembali set kueri;
kelas Meta:
model = TestModel
bidang = ['pertama', 'terakhir', 'pertama_dan_terakhir']

kelas TestSerializer(serializers.ModelSerializer):
kelas Meta:
model = TestModel
bidang = ['pertama', 'terakhir']

kelas TestViewSet(viewsets.ModelViewSet):
model = TestModel
queryset = TestModel.objects.all()
serializer_class = TestSerializer
filter_backends = (Django_filters.rest_framework.DjangoFilterBackend,)
filter_fields = ('pertama', 'terakhir', 'pertama_dan_terakhir', )
filter_class = TestFilter`

Filter viewset pengujian di sini mengharapkan parameter kueri menjadi "benar" atau "salah" untuk bidang "pertama" dan "terakhir", tetapi mengharapkannya menjadi 1,2 atau 3 untuk bidang filter "pertama_dan_terakhir".
Misalnya memfilter kueri dingin menjadi seperti ini:
/api/test/?first=true&first_and_last=2

Ini adalah contoh yang disederhanakan dalam proyek nyata yang saya temui, filter khusus berisi logika yang lebih rumit.
Saya telah menyiapkan repo dengan semua kode yang diperlukan untuk mereproduksi masalah.
https://github.com/inakrin/boolfilter

Komentar yang paling membantu

Halo @inakrin. Anda harus mengimpor filters dari sub-paket rest_framework .

https://github.com/carltongibson/django-filter/blob/develop/django_filters/rest_framework/filters.py

Semua 3 komentar

Halo @inakrin. Anda harus mengimpor filters dari sub-paket rest_framework .

https://github.com/carltongibson/django-filter/blob/develop/django_filters/rest_framework/filters.py

Jadi mungkin harus disebutkan dalam dokumentasi DRF karena mereka menyarankan untuk mengimpor dari filter:
http://www.django-rest-framework.org/api-guide/filtering/#specifying -a-filterset
Dan tentu saja berfungsi dalam semua kasus kecuali BooleanFilter.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat