Django TypeError:super(type,obj):obj必须是type的实例或子类型?

Django TypeError:super(type,obj):obj必须是type的实例或子类型?,django,python-3.x,django-models,django-forms,django-views,Django,Python 3.x,Django Models,Django Forms,Django Views,为什么我会犯这个错误 TypeError: super(type, obj): obj must be an instance or subtype of type 这是我的models.py文件 class UserNotification(models.Model): Name = models.CharField(max_length=250) Mobile_No = models.CharField(max_length=10, validators=[RegexValidator(r

为什么我会犯这个错误

TypeError: super(type, obj): obj must be an instance or subtype of type
这是我的models.py文件

class UserNotification(models.Model):
Name = models.CharField(max_length=250)
Mobile_No = models.CharField(max_length=10, validators=[RegexValidator(r'^\d{1,10}$')])
Proof = models.TextField()
viewed = models.BooleanField(default=False)
user = models.ForeignKey(User)
date = models.DateTimeField(default=timezone.now)

def __str__(self):
    return self.Name

class Meta:
    ordering = ["-date"]
这是my views.py文件

class RequestItem(generic.CreateView):
    model = UserNotification
    fields = ['Name', 'Mobile_No', 'Proof']

    def get_form(self, form_class=None):
        if form_class is None:
            form_class = self.get_form_class()
        form = super(UserNotification, self).get_form(form_class)
        form.fields['Name'].widget = TextInput(attrs={'placeholder': '*Enter your name'})
        form.fields['Mobile_No'].widget = TextInput(
            attrs={'placeholder': "*Enter your's mobile number to get a call back from angel"})
        form.fields['Proof'].widget = TextInput(attrs={'placeholder': '*enter proof you have for your lost item'})
        return form

    def form_valid(self, form):
        print(self.kwargs)

        self.object = form.save(commit=False)
        qs = Report_item.objects.filter(id=self.kwargs.get("pk"))
        self.object.user = qs[0].owner
        self.object.save()
        return HttpResponse("<h1>Your request has been processed</h1>")
class RequestItem(generic.CreateView):
模型=用户通知
字段=['Name','Mobile\u No','Proof']
def get_表单(自身,表单类=无):
如果form_类为None:
form\u class=self.get\u form\u class()
form=super(UserNotification,self).get\u form(form\u类)
form.fields['Name'].widget=TextInput(attrs={'placeholder':'*输入您的姓名'})
form.fields['Mobile_No'].widget=TextInput(
attrs={'placeholder':“*输入您的手机号码以获得angel的回电”})
form.fields['Proof'].widget=TextInput(attrs={'placeholder':'*输入丢失物品的证据'})
报税表
def表单_有效(自身、表单):
打印(self.kwargs)
self.object=form.save(commit=False)
qs=Report\u item.objects.filter(id=self.kwargs.get(“pk”))
self.object.user=qs[0]。所有者
self.object.save()
返回HttpResponse(“您的请求已被处理”)

我正在使用django 1.11。在添加占位符函数之前,没有错误,代码工作正常。添加占位符后,我得到了这个错误。请帮我解决这个问题。

问题是在
get\u form
内部调用
super()
。您需要使用当前类;出于某种原因,您将模型类放在了那里。它需要:

form = super(RequestItem, self).get_form(form_class)
或者更好,因为您使用的是Python 3,所以请使用简短版本:

form = super().get_form(form_class)

然而,请注意,这并不是一个很好的方法来完成您在这里试图做的事情。相反,声明一个实际的表单类,该类为您想要更改的字段设置小部件属性,并通过在类级别设置
form\u class
属性在视图类中引用它。

好吧,您解决了我的问题。非常感谢。但为什么这不是一个很好的方法呢。我使用这种方式是因为我在StackOverflow上得到了一个答案。。