Implementing filters using dictionary packaging - Error: filter_queryset() missing 3 required positional arguments
Implementing filters using dictionary packaging - Error: filter_queryset() missing 3 required positional arguments
我正在尝试使用字典打包优化我的过滤器代码,但是我收到以下错误:
filter_queryset() missing 3 required positional arguments: 'industry', 'instructor', and 'mediaType'
views.py
class CourseList(generics.ListCreateAPIView):
serializer_class = CourseSerializer
def get_queryset(self):
queryset = Course.objects.all()
if(self.request.query_params):
queryParams = self.request.query_params
filterParams= queryParams.dict()
queryset = self.filter_queryset(queryset, **filterParams)
# if(queryParams.get('industry', None)):
# queryset = queryset.filter(industry=queryParams.get('industry', None))
# if(queryParams.get('instructor', None)):
# queryset = queryset.filter(instructor=queryParams.get('instructor', None))
# if(queryParams.get('mediaType', None)):
# queryset = queryset.filter(course_media__media_type=queryParams.get('mediaType', None))
return queryset
def filter_queryset(self, queryset, industry, instructor, mediaType):
queryset.filter(industry=industry).filter(instructor=instructor).filter(course_media__media_type=mediaType)
return queryset
url: http://127.0.0.1:8000/authenticator/course/?industry=IT&instructor=5&mediaType=mp4
调试器:
> c:\......\views.py(200)filter_queryset()
-> queryset.filter(industry=industry).filter(instructor=instructor).filter(course_media__media_type=mediaType)
(Pdb) queryset
<QuerySet [<Course: Course: lkjhh>, <Course: Course: lkjkj>]>
(Pdb) industry
'IT'
(Pdb) instructor
'5'
(Pdb) mediaType
'mp4'
(Pdb) self
<authenticator.views.CourseList object at 0x0466C890>
(Pdb) n
> c:\users\cherry\envs\projects\indiaclap\authenticator\views.py(201)filter_queryset()
-> return queryset
(Pdb) n
--Return--
> c:\users\cherry\envs\projects\indiaclap\authenticator\views.py(201)filter_queryset()-><QuerySet [<C...urse: lkjkj>]>
-> return queryset
(Pdb) queryset
<QuerySet [<Course: Course: lkjhh>, <Course: Course: lkjkj>]>
(Pdb) c
我在这里遗漏了什么,因为当我调试 filter_queryset
方法时,我可以看到所有三个过滤器值都被正确填充。
问题是因为我使用了名称 filter_queryset,这是 django 中的预定义功能,因此错误地覆盖了它。更改函数的名称清除了报告的错误,尽管我 运行 稍后会变成其他一些错误
我正在尝试使用字典打包优化我的过滤器代码,但是我收到以下错误:
filter_queryset() missing 3 required positional arguments: 'industry', 'instructor', and 'mediaType'
views.py
class CourseList(generics.ListCreateAPIView):
serializer_class = CourseSerializer
def get_queryset(self):
queryset = Course.objects.all()
if(self.request.query_params):
queryParams = self.request.query_params
filterParams= queryParams.dict()
queryset = self.filter_queryset(queryset, **filterParams)
# if(queryParams.get('industry', None)):
# queryset = queryset.filter(industry=queryParams.get('industry', None))
# if(queryParams.get('instructor', None)):
# queryset = queryset.filter(instructor=queryParams.get('instructor', None))
# if(queryParams.get('mediaType', None)):
# queryset = queryset.filter(course_media__media_type=queryParams.get('mediaType', None))
return queryset
def filter_queryset(self, queryset, industry, instructor, mediaType):
queryset.filter(industry=industry).filter(instructor=instructor).filter(course_media__media_type=mediaType)
return queryset
url: http://127.0.0.1:8000/authenticator/course/?industry=IT&instructor=5&mediaType=mp4
调试器:
> c:\......\views.py(200)filter_queryset()
-> queryset.filter(industry=industry).filter(instructor=instructor).filter(course_media__media_type=mediaType)
(Pdb) queryset
<QuerySet [<Course: Course: lkjhh>, <Course: Course: lkjkj>]>
(Pdb) industry
'IT'
(Pdb) instructor
'5'
(Pdb) mediaType
'mp4'
(Pdb) self
<authenticator.views.CourseList object at 0x0466C890>
(Pdb) n
> c:\users\cherry\envs\projects\indiaclap\authenticator\views.py(201)filter_queryset()
-> return queryset
(Pdb) n
--Return--
> c:\users\cherry\envs\projects\indiaclap\authenticator\views.py(201)filter_queryset()-><QuerySet [<C...urse: lkjkj>]>
-> return queryset
(Pdb) queryset
<QuerySet [<Course: Course: lkjhh>, <Course: Course: lkjkj>]>
(Pdb) c
我在这里遗漏了什么,因为当我调试 filter_queryset
方法时,我可以看到所有三个过滤器值都被正确填充。
问题是因为我使用了名称 filter_queryset,这是 django 中的预定义功能,因此错误地覆盖了它。更改函数的名称清除了报告的错误,尽管我 运行 稍后会变成其他一些错误