首页 > 解决方案 > 抛出异常使用的字符串对象不可调用,django

问题描述

在 /test/ 处获取错误:TypeError

'str' 对象不可调用

表单视图

class Test(FormView):
template_name = "pkm_templates/main.html"
 form_class = "Testform"
 success_url = '/thanks/'
 def form_valid(self,form):
    title = form.cleaned_data.get("title")
    fkey = form.cleaned_data.get("fkey")
    instance = Buildkb.objects.create(title=title,fkey=fkey)
    for user in fkey:
        instance.fkey.add(user)
        instance.save()
    return redirect("/")

网址:

path('test/',views.Test.as_view(),name="test")

对于另一个模型,我使用了 approch formview , modelform 和 url 相同,这个也不例外。

标签: pythondjango

解决方案


如文件所述,form_class应该是您的表单类对象,而不是它的名称:

# assuming TestForm is defined in "yourapp.forms"
from yourapp.forms import TestForm

class Test(FormView):
   template_name = "pkm_templates/main.html"
   form_class = Testform

   # XXX you don't need this one since you're
   # bypassing `FormView.form_valid()` and
   # directly returning a redirect...
   success_url = '/thanks/'

   def form_valid(self,form):
       title = form.cleaned_data.get("title")
       fkey = form.cleaned_data.get("fkey")
       instance = Buildkb.objects.create(title=title,fkey=fkey)
       for user in fkey:
          instance.fkey.add(user)
       instance.save()
       # Unrelated, but you should NOT hardcode urls
       # - use `reverse()` instead
       return redirect("/")

推荐阅读