首页 > 解决方案 > Django CreateView:'str'对象不可调用

问题描述

我正在尝试使用 django's CreateView,但出现以下错误:

File "/Users/PycharmProjects/gusta/venv/lib/python3.8/site-packages/django/views/generic/edit.py", line 33, in get_form
    return form_class(**self.get_form_kwargs())
TypeError: 'str' object is not callable

视图.py:

from django.views.generic import ListView, CreateView, DeleteView, DetailView, UpdateView
from .models import Employee, Event, detailEvent, Department, Poste
from django.contrib.auth.mixins import LoginRequiredMixin
from django.urls import reverse, reverse_lazy

# -----------------------------------------------------  Views for postes.
class PostelistView(LoginRequiredMixin, ListView):
    template_name = "postes/post_list.html"
    context_object_name = "Poste"

    def get_queryset(self):
        # initial queryset of leads for the entire organisation
        queryset = Poste.objects.all()
        return queryset


class PosteCreateView(LoginRequiredMixin, CreateView):
    template_name = "postes/post_create.html"
    form_class = "Poste"

    def get_success_url(self):
        return reverse_lazy("employee:post_list")

    def form_valid(self, form):
        instance = form.save(commit=False)
        instance.save()
        self.Poste = instance
        return super(PosteCreateView, self).form_valid(form)

我的模型.py

from django.utils.translation import ugettext_lazy as _
class Poste(models.Model):
    intitule = models.TextField(_("Name"), max_length=250, default='')

为什么会这样?

标签: django

解决方案


PosteCreateView中,您设置

form_class = "Poste"

这不是一个类,它是一个字符串。Django 期望它是一个类,稍后会尝试实例化一个对象。您可以在错误消息中看到这一点,它为您提供了发生异常的行:

return form_class(**self.get_form_kwargs())

要解决它,请设置form_class为实际类:

form_class = Poste

推荐阅读