2012-08-01 151 views
2

我嘗試將django poll應用程序應用到我自己的應用程序(一個IMC計算器),以改進和構建我在python/django中的第一步的一個小項目。'dict'object has no attribute'create'/'save'

我嘗試保存我的第一種形式的數據是accueil.html

<form action="" method="post"> 
    <table> 
    {{ form.as_table }} 
    </table> 

<input type ="submit" value="Submit"> 
</form> 

這裏是我的forms.py

from django import forms 

class IndividuDataForm(forms.Form): 
    nom = forms.CharField(max_length=100) 
    prenom = forms.CharField(max_length= 100) 
    anniversaire = forms.DateField() 
    taille = forms.IntegerField() 
    poids = forms.IntegerField() 

這裏是我的models.py

from django.db import models 

from django.forms import ModelForm 

class Individu(models.Model): 

    nom = models.CharField(max_length=100) 
    prenom = models.CharField(max_length= 100) 
    anniversaire = models.DateField() 
    taille = models.IntegerField() 
    poids = models.IntegerField() 

    def __unicode__(self): 

     return self.nom 

class ImcResultat(models.Model): 

    individu = models.ManyToManyField(Individu) 

    imc = models.IntegerField() 

    date_imc = models.DateField() 

class IndividuForm(ModelForm): 

    class Meta: 

     model = Individu 


class ImcResultatForm(ModelForm): 

    class Meta: 

     model = ImcResultat 

最後我* views.py *是在這裏: 問題是在該行13 * A = cd.create()*當我嘗試保存數據從表單到數據庫。

from django.shortcuts import render_to_response 
from django.http import HttpResponse, HttpResponseRedirect 
from models import Individu, ImcResultat 
from forms import IndividuDataForm 

def accueil(request): 

    if request.method == 'POST': 

     form = IndividuDataForm(request.POST) 

     if form.is_valid(): 

      cd = form.cleaned_data 

      a = cd.create() **#this is the problem** 

      return HttpResponseRedirect('/accueil/page2/') 

    else: 

     form = IndividuDataForm() 

     return render_to_response('accueil.html', {'form':form}) 





def page2(request): 



    return render_to_response('page2.html') 

我想它是在views.py的第一部分,我的功能不能很好地工作,它不會保存表單在數據庫中。 高清ACCUEIL(請求):

if request.method == 'POST': 

    form = IndividuDataForm(request.POST) 

    if form.is_valid(): 

     cd = form.cleaned_data 

     a = cd.create() **#this is the problem** 

     return HttpResponseRedirect('/accueil/page2/') 

檢查,如果表單有效後,我在清理表單中的數據,然後嘗試將其保存。 ,我得到這個錯誤:

Exception Type: AttributeError 
Exception Value: 'dict' object has no attribute 'create' 

我想這是從dictionnary,但從來沒有在我的代碼使用{}爲dictionnary名單。 所以我不知道,並陷入學習的過程。

感謝您的幫助,我希望從我的第一個stackoverflow後,我沒有犯太多的錯誤。

回答

3

您應該使用ModelForm,它將自動定義字段以匹配模型上的字段。然後您可以撥打form.save()直接從表單創建實例。

+0

感謝大家的幫助,再次查看關於使用ModelForm的代碼我使用的是Forms.py中的IndividuDataForm,並使用models.py中的IndividuForm進行更改,它的工作原理是!!! – Tony 2012-08-01 21:10:05

2

丹尼爾的回答是更正確的

if form.is_valid(): 
    form.save() 

我會離開我原來的答覆,雖然,只是爲了文檔鏈接。

form.cleaned_data是一種字典類型,並且沒有create()方法。我假設你正試圖爲數據創建一個模型到數據庫中?

查看Can a dictionary be passed to django models on create?以從該字典創建模型。一個示例可能是:

cd = form.cleaned_data 
themodel = Individu(**cd) 
themodel.save() 

以下是處理表單數據的文檔。

https://docs.djangoproject.com/en/dev/topics/forms/#processing-the-data-from-a-form

祝你好運!

-2

如果您只是想將提交的數據保存爲django ModelForm,請使用form.save()。

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

這將已經在使用清潔/驗證的數據。

如果您需要做某事,您可以使用form.cleaned_data。而不是用模型實例保存它。

+0

-1:你的答案的哪一部分未被丹尼爾或瑞恩所涵蓋? – 2012-08-01 20:15:50

+0

無。只是沒有看到他們。 – alex 2012-08-01 20:20:06

相關問題