Ошибка типа: super (type, obj): obj должен быть экземпляром или подтипом типа? - PullRequest
0 голосов
/ 02 сентября 2018

Почему я получаю эту ошибку?

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"]

Это мой файл 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>")

Я использую Django 1.11. Не было ошибок и код работал правильно, пока я не добавил функцию-заполнитель. После добавления заполнителя я получаю эту ошибку. Пожалуйста, помогите мне решить эту проблему.

1 Ответ

0 голосов
/ 02 сентября 2018

Проблема в том, что вы звоните super() внутри get_form. Вам нужно использовать текущий класс; по какой-то причине вы поместили класс модели туда. Это должно быть:

form = super(RequestItem, self).get_form(form_class)

Или лучше, так как вы используете Python 3, используйте короткую версию:

form = super().get_form(form_class)

Обратите внимание, однако, что это не очень хороший способ сделать то, что вы пытаетесь сделать здесь. Вместо этого объявите фактический класс формы, который устанавливает атрибуты виджета для полей, которые вы хотите изменить, и обратитесь к нему в классе представления, установив атрибут form_class на уровне класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...