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.
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=value2Melewati 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
.
Komentar yang paling membantu
Saya membuatnya berfungsi hanya dengan memindahkan panggilan sebagai berikut
Terima kasih untuk bantuannya!!!