【问题标题】:'UserForm' object has no attribute 'Cleaned_data''UserForm' 对象没有属性 'Cleaned_data'
【发布时间】:2017-01-25 08:34:15
【问题描述】:

所以我刚刚创建了一个表单并不断收到此错误,为什么?检查表单是否有效后,我正确使用了 Cleaned_data,对吗?

这是我的forms.py:

class UserForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput)
username = forms.CharField(max_length=10)
email = forms.EmailField()

class Meta:
    model = User
    fields = ['username', 'email', 'password']

这是我的views.py:

class UserFormView(View):
form_class = UserForm
template_name = 'Home/index.html'

def get(self, request):
    form = self.form_class(None)
    return render(request, self.template_name, {'form': form})

def post(self, request):
    form = self.form_class(request.POST)
    if form.is_valid():
        user = form.save(commit=False)
        username = form.Cleaned_data['username']
        password = form.Cleaned_data['password']
        user.set_password(password)
        user.save()

        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                return redirect('Home:Dashboard')

    return render(request, self.template_name, {'form': form})

我的 urls.py:

urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^register$', views.UserFormView.as_view(), name='register'),]

和表格位置:

<form action="/register" method="post">
    {% csrf_token %}
<ul class="contactList">
    <li id="username1" class="contact">{{ form.username }}</li>
    <li id="email1" class="contact">{{ form.email }}</li>
    <li id="password1" class="contact">{{ form.password }}</li>
</ul>
<input type="submit" value="Submit">
</form>

关于这个问题还有其他主题,但我无法从中获得任何帮助,因为大多数人没有包含 if form.is_valid(),但在我的情况下我包含。

【问题讨论】:

  • cleaned_data 应为小写
  • @Sayse 感谢您的回复。将它们都更改为小写,仍然得到相同的错误..
  • 请包含完整的堆栈跟踪
  • 请包含错误信息。最好用 4 个空格正确对齐。尝试使用 pdb 或 ipdb 进行调试,让我们知道您在那里看到了什么。

标签: django django-models django-forms django-templates django-views


【解决方案1】:

使用form.cleaned_data.get('username') 而不是form.Cleaned_data

编辑 使用FormView

from django.views.generic.edit import FormView
class UserFormView(FormView):
    form_class = UserForm
    template_name = 'Home/index.html'

    def form_valid(self, form):
        user = form.save(commit=False)
        username = form.cleaned_data.get('username')
        ...

get_form_class 返回表单的类,即UserForm。你需要的是那个类的一个对象。该类没有任何属性cleaned_data

【讨论】:

  • 感谢您的回复。我把form.Cleaned_data都改成了form.cleaned_data.get('username/password'),还是一样的错误。
  • 您在视图基类中使用的是FormView 还是View
  • View, class UserFormView(View): in my views.py
  • 使用FormView 作为基类并覆盖form_valid 方法。参考:docs.djangoproject.com/en/1.10/topics/class-based-views/…
猜你喜欢
  • 2016-06-24
  • 2011-12-26
  • 2018-04-04
  • 2012-02-22
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多