Django-filter: DRF 톡합은 μΆ”κ°€ λ·° μ„ΈνŠΈ μž‘μ—…μ— λŒ€ν•΄ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2018λ…„ 08μ›” 16일  Β·  9μ½”λ©˜νŠΈ  Β·  좜처: carltongibson/django-filter

μ—¬κΈ° 에 μ„€λͺ…λœ @action λ°μ½”λ ˆμ΄ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ 단일 보기 μ„ΈνŠΈμ— μ—¬λŸ¬ λͺ©λ‘ μž‘μ—…μ΄ 있고 μ—¬κΈ° λ¬Έμ„œμ— μ§€μ •λœ λŒ€λ‘œ filter_classλ₯Ό 톡해 FilterSetλ₯Ό ν¬ν•¨ν–ˆμŠ΅λ‹ˆλ‹€. ν•„ν„°λŠ” κΈ°λ³Έ ViewSet λͺ©λ‘ 및 검색 μž‘μ—…μ—λ§Œ 적용되며 μ‹€μ œλ‘œ ν•„ν„°κ°€ ν•„μš”ν•œ μ‚¬μš©μž 지정 λͺ©λ‘ λ˜λŠ” 검색 μž‘μ—…μ—λŠ” μ μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‹€μŒκ³Ό 같이 톡화λ₯Ό μ΄λ™ν•˜μ—¬ μž‘λ™ν•˜λ„λ‘ ν–ˆμŠ΅λ‹ˆλ‹€.

@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)

도와 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!!!

λͺ¨λ“  9 λŒ“κΈ€

μ•ˆλ…•ν•˜μ„Έμš” @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
.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰