Атрибут AttributeError в / registration / 'UserForm' не имеет атрибута 'save' - PullRequest
0 голосов
/ 30 января 2012
Request Method:     POST
Request URL:    http://127.0.0.1:8000/registration/
Django Version:     1.3.1
Exception Type:     AttributeError
Exception Value:    

'UserForm' object has no attribute 'save'

Exception Location:     /home/forent/myprograms/mysite7/registration/views.py in user_details, line 15
Python Executable:  /usr/bin/python
Python Version:     2.7.2
Python Path:    

['/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']

Server time:    Mon, 30 Jan 2012 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 полей. и страницы хотят показывать в одном окне. а также должны проверить поля. но я не имею четкого представления о Ajax с Django. как я могу применить все эти вещи в моем коде

Ответы [ 2 ]

3 голосов
/ 30 января 2012

Вы не можете сохранить форму. Форма используется для отображения данных из ваших моделей (БД) пользователю (обычно). Вы можете сохранить экземпляр модели из формы, используя 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

p.s. Django уже имеет встроенную аутентификацию, поэтому нет необходимости дублировать код. Посмотрите на django.contrib.auth https://docs.djangoproject.com/en/dev/topics/auth/

1 голос
/ 30 января 2012

Пользовательская форма, которую вы определили, не является ModelForm, и поэтому не имеет метода save () .

использование ModelForm например

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