Django-filter: Integrasi DRF tidak berfungsi untuk tindakan tampilan tambahan

Dibuat pada 16 Agu 2018  ·  9Komentar  ·  Sumber: carltongibson/django-filter

Saya memiliki beberapa tindakan daftar dalam satu tampilan dengan memanfaatkan dekorator @action seperti yang dijelaskan di sini dan telah menyertakan FilterSet melalui filter_class sebagaimana ditentukan dalam dokumen di sini . Filter hanya diterapkan ke tindakan ViewSet List dan Retrieve default dan bukan tindakan List atau Retrieve kustom mana pun yang sebenarnya membutuhkan filter.

Komentar yang paling membantu

Saya membuatnya berfungsi hanya dengan memindahkan panggilan sebagai berikut

@action(methods=['GET'], detail=False)
def simplelist(self, request, *args, **kwargs):
    qs = self.filter_queryset(self.get_queryset())
    serializer = SpecializedModelListSerializer(qs, many=True)
    return Response(serializer.data, status=status.HTTP_200_OK)

Terima kasih untuk bantuannya!!!

Semua 9 komentar

Hai @estianross. Anda perlu memberikan detail lebih lanjut jika kami dapat memberikan komentar.

Apakah Anda yakin tindakan ekstra Anda memanggil filter_queryset() ?

Mereka melakukannya tetapi saya cukup yakin saya tidak menggunakannya dengan cara yang seharusnya digunakan jika di situlah masalahnya, saya telah menyertakan contoh tindakan sederhana di bawah ini untuk menunjukkan dasar-dasar dari apa yang saya lakukan dalam tindakan ini

@action(methods=['GET'], detail=False)
def simplelist(self, request, *args, **kwargs):
    serializer = SpecializedModelListSerializer(self.filter_queryset(self.get_queryset()), many=True)
        return Response(serializer.data, status=status.HTTP_200_OK)

Saya sarankan Anda membuat APITestCase dan memasukkan url + parameter kueri yang Anda harapkan ke dalamnya. Anda kemudian dapat membuat pernyataan dan menyisipkan breakpoint sesuai kebutuhan untuk melihat di mana ada yang salah dengan Anda.

(Saya khawatir tanpa lebih banyak detail tidak mungkin untuk dapat memberi saran sama sekali.)

Saya membuatnya berfungsi hanya dengan memindahkan panggilan sebagai berikut

@action(methods=['GET'], detail=False)
def simplelist(self, request, *args, **kwargs):
    qs = self.filter_queryset(self.get_queryset())
    serializer = SpecializedModelListSerializer(qs, many=True)
    return Response(serializer.data, status=status.HTTP_200_OK)

Terima kasih untuk bantuannya!!!

Ini sepertinya tidak berhasil di sebagian besar kasus saya.

Saya pikir masalah ini harus dibuka kembali. Saya memiliki masalah yang sama dan solusi yang diusulkan berhasil untuk saya.

@action(methods=['get'], detail=Benar, url_path='retrieve_by_card_no/(< int:CardNo> )')
def getByCarNo(self, request, CardNo):
pengguna = get_object_or_404(model_karyawan, EmpCardNo=CardNo)
kembalikan Response(serializers.EmployeeInfoSerializer(user).data, status=status.HTTP_200_OK)

Saya ingin mencari karyawan dengan no kartunya alih-alih id karyawan

ada yang bisa bantu saya?

Saya pikir integrasi filter berfungsi dengan benar jika Anda meneruskan params kueri bersama dengan tindakan Anda di URL. Di bawah ini adalah tindakan yang saya miliki

@action(methods=['GET'], detail=False)
def export(self, request): 
    queryset = self.get_queryset()
    filtered_queryset = self.filter_queryset(queryset)

Saat mencoba memanggil tindakan ekspor dari API yang dapat dijelajahi DRF, permintaan yang dikirim adalah
/api/viewname/export/ sebagai gantinya harus disebut like
/api/viewname/export/?query_param_1=value1&?query_param_2=value2

Melewati parameter kueri bersama dengan tindakan akan memanggil kelas filterset dan karenanya Anda akan mendapatkan kueri yang difilter dalam variabel filtered_queryset

Terima kasih banyak saya mengerti

Pada Rab, Apr 28, 2021 at 12:32 AM Mohammed Sunasra @ . * >
menulis:

Saya pikir integrasi filter berfungsi dengan benar jika Anda meneruskan kueri
params bersama dengan tindakan Anda di URL. Di bawah ini adalah tindakan yang saya miliki

@action(methods=['GET'], detail=False)
def ekspor (sendiri, permintaan):
queryset = self.get_queryset()
filtered_queryset = self.filter_queryset(set kueri)

Saat mencoba memanggil tindakan ekspor dari API yang dapat dijelajahi DRF, permintaannya
yang dikirim adalah
/api/viewname/export/ sebagai gantinya harus disebut like
/api/viewname/export/?query_param_1=value1&?query_param_2=value2

Melewati parameter kueri bersama dengan tindakan akan memanggil filterset
kelas dan karenanya Anda akan mendapatkan set kueri yang difilter di filtered_queryset
variabel


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/carltongibson/django-filter/issues/967#issuecomment-828220562 ,
atau berhenti berlangganan
https://github.com/notifications/unsubscribe-auth/AMD2QQXC6FGISRWTHRAGUSTTK62Y7ANCNFSM4FP6FMMQ
.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

csarcom picture csarcom  ·  3Komentar

sassanh picture sassanh  ·  4Komentar

xtrinch picture xtrinch  ·  4Komentar

jwineinger picture jwineinger  ·  3Komentar

chromakey picture chromakey  ·  5Komentar