3

django poll アプリケーションを自分のアプリケーション (IMC 電卓) に適用して、python/django での最初のステップのために小さなプロジェクトを改善および構築しようとしています。

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 の最初の部分にあると思います。フォームがデータベースに保存されません。def 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'

辞書からのものだと思いますが、私のコードでは辞書リストに { } を使用することはありません。だから私は何もわからず、学習の過程で立ち往生しています。

ご協力いただきありがとうございます。最初のスタックオーバーフローの投稿から、あまり多くの間違いを犯さなかったことを願っています。

4

3 に答える 3

3

モデルのフィールドと一致するようにフィールドを自動的に定義する ModelForm を使用する必要があります。form.save()次に、フォームから直接インスタンスを作成するために呼び出すことができます。

于 2012-08-01T20:08:31.427 に答える
3

ダニエルの答えはより正しいです

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

ただし、ドキュメントのリンクのためだけに、元の回答を残します。

form.cleaned_data はディクショナリ タイプであり、create() メソッドがありません。そのデータのモデルをデータベースに作成しようとしていると思いますか?

作成時に辞書を django モデルに渡すことができますか? をご覧ください。その辞書からモデルを作成します。例は次のとおりです。

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

フォームデータを処理するためのドキュメントもここにあります。

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

幸運を!

于 2012-08-01T20:03:24.737 に答える
-2

送信されたデータを django ModelForm として保存するだけの場合は、form.save() を使用します。

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

これは、すでにクリーニング/検証済みのデータを使用しています。

sth を実行する必要がある場合は、form.cleaned_data を使用できます。モデルインスタンスで保存する以外。

于 2012-08-01T20:13:13.697 に答える