我正在学习Django,我正在学习lynda.com课程。 在其中一门课程“建立在线学习网站”中,有以下代码:
class CourseModuleUpdateView(TemplateResponseMixin, View):
template_name = 'courses/manage/module/formset.html'
course = None
def get_formset(self, data=None):
return ModuleFormSet(instance=self.course,
data=data)
def dispatch(self, request, pk):
self.course = get_object_or_404(Course, id=pk, owner=request.user)
return super(CourseModuleUpdateView, self).dispatch(request, pk)
def get(self, request, *args, **kwargs):
formset = self.get_formset()
return self.render_to_response({'course': self.course,
'formset': formset})
def post(self, request, *args, **kwargs):
formset = self.get_formset(data=request.POST)
if formset.is_valid():
formset.save()
return redirect('manage_course_list')
return self.render_to_response({'course': self.course,
'formset': formset})
但我从PyCharm(我的IDE)收到一条错误消息:
def dispatch(self, request, pk):
错误是:
Signature of method 'CourseModuleUpdateView.dispatch()' does not match signature of base method in class 'View' less... (Ctrl+F1)
This inspection detects inconsistencies in overriding method signatures.
有没有办法让我解决这个问题,看看如何开始修复错误?Pycharm想告诉我什么??
我正在使用python 3和DJango 1.11
您正在重写签名为
def dispatch(self, request, *args, **kwargs):
的父类View
的方法dispatch
,您可以从中看到该方法不匹配。这里的签名意味着方法参数应该与要重写的父类方法匹配。
首先你必须明白这是一个警告,而不是错误。
其次:Django传递给视图的每个参数(除了
request
)都是从URL中提取的,定义见urlpatterns
。Django正在基于类的视图中内部使用*args
和**kwargs
,因此您可以传递任何参数,而无需重写dispatch
方法。回到我们的警告:这个警告是由许多静态代码分析工具(包括PyCharm中内置的一个)发出的,以通知您这里可能有问题,因为原始的分派方法具有不同的签名。这并不意味着这是错误的,这就是为什么总是有选项在选定的代码行上禁用这些警告。当然,你应该看看你的编辑提出的每一个警告,但这并不意味着每一个警告都应该被修正。
当然,您可以使用以下方法修复它:
但你也可以忽略这一点,按原样使用。您的使用有一些好处,例如在方法调用上自动验证所有必需的参数都已通过。使用默认方法签名(如上所述)不会在编辑器中引发警告。由你来决定哪个更好。
相关问题 更多 >
编程相关推荐