μ¬κΈ° μ μ€λͺ λ @action λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νμ¬ λ¨μΌ 보기 μΈνΈμ μ¬λ¬ λͺ©λ‘ μμ μ΄ μκ³ μ¬κΈ° λ¬Έμμ μ§μ λ λλ‘ filter_classλ₯Ό ν΅ν΄ FilterSetλ₯Ό ν¬ν¨νμ΅λλ€. νν°λ κΈ°λ³Έ ViewSet λͺ©λ‘ λ° κ²μ μμ μλ§ μ μ©λλ©° μ€μ λ‘ νν°κ° νμν μ¬μ©μ μ§μ λͺ©λ‘ λλ κ²μ μμ μλ μ μ©λμ§ μμ΅λλ€.
μλ νμΈμ @estianrossμ λλ€. μ견μ μ μνλ €λ©΄ λ μμΈν μ 보λ₯Ό μ 곡ν΄μΌ ν©λλ€.
μΆκ° μμ
μ΄ filter_queryset()
λ₯Ό νΈμΆνκ³ μλ€κ³ νμ ν©λκΉ?
νμ§λ§ λ¬Έμ κ° μλ κ²½μ° μ¬μ©ν΄μΌ νλ λ°©μμΌλ‘ μ¬μ©νμ§ μμ κ²μ΄λΌκ³ νμ ν©λλ€. μ΄λ¬ν μμ μμ μννλ μμ μ κΈ°λ³Έ μ¬νμ 보μ¬μ£ΌκΈ° μν΄ μλμ κ°λ¨ν μν μμ μ ν¬ν¨νμ΅λλ€.
@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)
APITestCase λ₯Ό λ§λ€κ³ μμνλ url + 쿼리 맀κ°λ³μλ₯Ό μ¬κΈ°μ μ°κ²°νλ κ²μ΄ μ’μ΅λλ€. κ·Έλ° λ€μ λ¬Έμ κ° λ°μν λΆλΆμ νμΈνκΈ° μν΄ νμμ λ°λΌ μ£Όμ₯μ νκ³ μ€λ¨μ μ μ½μ ν μ μμ΅λλ€.
(λ μμΈν μ λ³΄κ° μμΌλ©΄ μ‘°μΈμ λ릴 μ μμ΅λλ€.)
λ€μκ³Ό κ°μ΄ ν΅νλ₯Ό μ΄λνμ¬ μλνλλ‘ νμ΅λλ€.
@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)
λμ μ£Όμ μ κ°μ¬ν©λλ€!!!
μ΄κ²μ λλΆλΆμ κ²½μ° μλνμ§ μλ κ² κ°μ΅λλ€.
μ΄ λ¬Έμ λ λ€μ νμ΄μΌ νλ€κ³ μκ°ν©λλ€. λλ κ°μ λ¬Έμ κ° μμΌλ©° μ μ λ μ루μ μ΄ μ μκ² ν¨κ³Όμ μ΄μμ΅λλ€.
@action(methods=['get'], detail=True, url_path='retrieve_by_card_no/(< int:CardNo> )')
def getByCarNo(μμ , μμ², CardNo):
μ¬μ©μ = get_object_or_404(employe_model, EmpCardNo=CardNo)
λ°ν μλ΅(serializers.EmployeeInfoSerializer(user).data, status=status.HTTP_200_OK)
μ§μ ID λμ μΉ΄λ λ²νΈλ‘ μ§μμ κ²μνκ³ μΆμ΅λλ€.
λꡬλ μ§ λλ₯Ό λμΈ μ μμ΅λκΉ?
URLμμ μμ κ³Ό ν¨κ» 쿼리 맀κ°λ³μλ₯Ό μ λ¬νλ©΄ νν° ν΅ν©μ΄ μ¬λ°λ₯΄κ² μλνλ€κ³ μκ°ν©λλ€. μλλ λ΄κ° ν νλ
@action(methods=['GET'], detail=False)
def export(self, request):
queryset = self.get_queryset()
filtered_queryset = self.filter_queryset(queryset)
DRF νμ κ°λ₯ APIμμ λ΄λ³΄λ΄κΈ° μμ
μ νΈμΆνλ €κ³ ν λ μ μ‘λ μμ²μ λ€μκ³Ό κ°μ΅λλ€.
/api/viewname/export/ λμ λ€μκ³Ό κ°μ΄ νΈμΆν΄μΌ ν©λλ€.
/api/viewname/export/?query_param_1=value1&?query_param_2=value2
μμ κ³Ό ν¨κ» 쿼리 맀κ°λ³μλ₯Ό μ λ¬νλ©΄ νν°μΈνΈ ν΄λμ€κ° νΈμΆλλ―λ‘ νν°λ 쿼리μΈνΈλ νν°λ_쿼리μΈνΈ λ³μμ νμλ©λλ€.
λλΆμ μκ² λμμ΄μ κ°μ¬ν©λλ€
2021λ
4μ 28μΌ μμμΌ μ€μ 12:32 Mohammed Sunasra @ . * >
μΌλ€:
쿼리λ₯Ό ν΅κ³Όνλ©΄ νν° ν΅ν©μ΄ μ λλ‘ μλνλ€κ³ μκ°ν©λλ€
URLμμ μμ κ³Ό ν¨κ» 맀κ°λ³μλ₯Ό μ λ ₯ν©λλ€. μλλ λ΄κ° ν νλ@action(λ©μλ=['GET'], λν μΌ=κ±°μ§)
def λ΄λ³΄λ΄κΈ°(μμ , μμ²):
쿼리 μΈνΈ = self.get_queryset()
filter_queryset = self.filter_queryset(queryset)DRF νμ κ°λ₯ APIμμ λ΄λ³΄λ΄κΈ° μμ μ νΈμΆνλ €κ³ ν λ μμ²
κ·Έκ²μ΄ 보λ΄μ§κ³ μμλ€
/api/viewname/export/ λμ λ€μκ³Ό κ°μ΄ νΈμΆν΄μΌ ν©λλ€.
/api/viewname/export/?query_param_1=value1&?query_param_2=value2μμ κ³Ό ν¨κ» 쿼리 맀κ°λ³μλ₯Ό μ λ¬νλ©΄ νν° μΈνΈκ° νΈμΆλ©λλ€.
ν΄λμ€μ΄λ―λ‘ Filtered_querysetμμ νν°λ§λ 쿼리 μΈνΈλ₯Ό μ»μ΅λλ€.
λ³νκΈ° μ¬μ΄β
λΉμ μ΄ λκΈμ λ¬μκΈ° λλ¬Έμ μ΄κ²μ λ°λ κ²μ λλ€.
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ³ GitHubμμ νμΈνμΈμ.
https://github.com/carltongibson/django-filter/issues/967#issuecomment-828220562 ,
λλ ꡬλ μ·¨μ
https://github.com/notifications/unsubscribe-auth/AMD2QQXC6FGISRWTHRAGUSTTK62Y7ANCNFSM4FP6FMMQ
.
κ°μ₯ μ μ©ν λκΈ
λ€μκ³Ό κ°μ΄ ν΅νλ₯Ό μ΄λνμ¬ μλνλλ‘ νμ΅λλ€.
λμ μ£Όμ μ κ°μ¬ν©λλ€!!!