【问题标题】:AttributeError at /registration/ 'UserForm' object has no attribute 'save'/registration/ 'UserForm' 对象的 AttributeError 没有属性 'save'
【发布时间】:2012-02-22 03:03:42
【问题描述】:
请求方法:POST 请求网址:http://127.0.0.1:8000/registration/ Django 版本:1.3.1 异常类型:属性错误 异常值: “用户窗体”对象没有属性“保存” 异常位置:/home/forent/myprograms/mysite7/registration/views.py 在 user_details 第 15 行 Python 可执行文件:/usr/bin/python Python版本:2.7.2 蟒蛇路径: ['/home/forent/myprograms/mysite7', '/usr/local/lib/python2.7/dist-packages/oauth2-1.5.211-py2.7.egg', '/usr/local/lib/python2.7/dist-packages', '/usr/local/lib/python2.7/dist-packages/python_twitter-0.8.2-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/ipython-0.12-py2.7.egg', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client', '/usr/lib/python2.7/dist-packages/ubuntuone-client', '/usr/lib/python2.7/dist-packages/ubuntuone-control-panel', '/usr/lib/python2.7/dist-packages/ubuntuone-couch', '/usr/lib/python2.7/dist-packages/ubuntuone-installer', '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol'] 服务器时间:2012 年 1 月 30 日星期一 03:24:22 -0600

我得到了这样的错误。我无法保存我的表格。请帮我保存我的表格

我的代码如下

#view 

from django.shortcuts import render_to_response
from registration.models import UserDetails
from forms import UserForm
from django import forms
from django.template import RequestContext
from django.http import HttpResponseRedirect

def user_details(request):
    if request.method == 'POST':
        form = UserForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/thanx/')

    else:
        form = UserForm()        
    return render_to_response("career.html", {"form": form},context_instance=RequestContext(request))


#form 

    from django import forms
from registration.models import UserDetails


class UserForm(forms.Form ):
    fname=forms.CharField(max_length=20)
    lname=forms.CharField(max_length=20)
    email = forms.EmailField()
    address = forms.CharField(max_length=50)
    country = forms.CharField(max_length=20)

#model 

from django.db import models

class UserDetails(models.Model):
    fname=models.CharField(max_length=20)
    lname=models.CharField(max_length=20)
    email = models.EmailField()
    address = models.CharField(max_length=50)
    country = models.CharField(max_length=20)
    def __unicode__(self):
        return self.fname
        return self.lname
        return self.email
        return self.address
        return self.country


#url

from django.conf.urls.defaults import patterns, include, url

from django.contrib import admin
admin.autodiscover()
# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
     url(r'^registration/$', 'registration.views.user_details', name='user_details'),
    # url(r'^mysite7/', include('mysite7.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
      url(r'^admin/', include(admin.site.urls)),
)

# template 

<form enctype="multipart/form-data" method="post">{% csrf_token %}
    {{ form.as_p }}
   <input type="submit" ....>
</form>

我还希望在我的代码中添加 ajaxcode,以便在一个页面中显示前 3 个表单文件。剩下 2 个字段的下一页。并且页面想要在单个窗口中显示。并且还必须验证字段。但我对使用 django 的 ajax 没有明确的想法。我如何在我的代码中应用所有这些东西

【问题讨论】:

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


    【解决方案1】:

    您无法保存表单。表单用于向用户(通常)显示模型(DB)中的数据。您可以使用forms.ModelForm 保存模型的实例来自表单:

    https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method

    forms.py

    class UserForm(forms.ModelForm):
        pass
    
        class Meta:
            model = UserDetails
    

    附言Django 已经内置了身份验证,因此无需复制代码。看看django.contrib.authhttps://docs.djangoproject.com/en/dev/topics/auth/

    【讨论】:

    • 问题已解决。保存了我的表单,非常感谢...我可以用我的代码添加 ajax 吗?
    • 这是一个不同的问题,因此您需要打开一个不同的问题并更好地解释问题
    【解决方案2】:

    您定义的 UserForm 不是 ModelForm,因此不是 does not have a save() method

    使用ModelForm 例如

    class UserForm(forms.ModelForm):
        class Meta:
            model = UserDetails
    

    【讨论】:

    【解决方案3】:

    我在 Django 3(2020 年 5 月)中遇到了 'UserForm' object has no attribute 'save' 错误。这是因为在我的表格中,我只给出了forms.Form

    我是这样改正的:

    class my_form_name(forms.Form,forms.ModelForm)
    

    注意:元类很重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-19
      • 2021-06-22
      • 1970-01-01
      • 2012-12-01
      • 2021-04-19
      • 2018-12-15
      • 1970-01-01
      • 2021-11-22
      相关资源
      最近更新 更多