所以我有一个非常简单的Django视图,基本上就是删除一个用户帐户:
class UserDeleteView(LoginRequiredMixin, SuccessMessageMixin, DeleteView):
success_message = _("Your account has been deleted")
success_url = reverse_lazy('account_logout')
def get_object(self):
return self.request.user
升级到Mypy 0.991后,我看到此错误:
error: Definition of "object" in base class "DeletionMixin" is incompatible with definition in base class "BaseDetailView" [misc]
我一辈子都搞不懂这是什么意思,如果能帮上忙,我将不胜感激。
谢谢
1条答案
按热度按时间zyfwsgd61#
DeletionMixin
类是为视图提供删除操作的mixin
,BaseDetailView
类是显示单个对象的详细视图的基类。要解决此问题,您可能需要在代码中注解变量和参数的类型,以确保
Mypy
正确地推断它们。例如,您可能需要指定要删除的对象的类型或详细信息视图中显示的对象的类型。下面是一个示例,说明如何将
DeletionMixin
和BaseDetailView
类与类型注解一起使用:在此示例中,
MyDetailView
类是一个详细信息视图,它显示MyModel
类型的单个对象,并且它还提供了一个删除操作,该操作接受HttpRequest
对象并返回HttpResponse
对象。通过annotating
,请求参数的类型和删除方法的返回值Mypy
能够推断正确的类型,并检查代码中的类型错误。当您尝试定义一个继承自两个基类的类时,如果这两个基类对同一属性或方法的定义存在冲突,有时会弹出
Error: Definition of "object" in base class "DeletionMixin" is incompatible with definition in base class "BaseDetailView" [misc]
错误。例如,考虑以下代码:
在本例中,
MyView
类试图从DeletionMixin
和BaseDetailView
继承,这两个类都定义了一个delete方法,然而,这两个方法有不同的实现,所以Python解释器无法确定调用MyView.delete()
时应该使用哪个方法。若要修复此错误,您需要移除其中一个冲突的基类,或者重写派生类中的冲突方法并提供解决冲突的新实现。
例如,可以如下所示覆盖
MyView
类中的delete方法:如果这个错误再次出现,我想我们必须等待,看看有人会如何解决它。