5

Djangoは初めてで、できる限りすべてのフォーラムとチュートリアルを使い果たしましたが、フォームデータをデータベースに取得するのにまだ問題があります。名前と電子メールフィールドで構成される単純なモデルがあり、最終的にプログラムで参照します。[送信]をクリックすると別のページを読み込むことができますが、データがデータベースに投稿されません。私は考えられるすべてのことを試したので、私のコードはおそらくこの時点でジャックされていますが、現在の反復ではこれが私が持っているものです:

#models.py
    from django.db import models
from django.forms import ModelForm

class Patron(models.Model):
    name = models.CharField(max_length=200)
    email = models.EmailField(max_length=75)


    def _unicode_(self):
        return self.name

class PatronForm(ModelForm):
    class Meta:
        model = Patron

#view.py

from django.shortcuts import render_to_response, get_object_or_404
from patrons.models import Patron 
from django.template import RequestContext
from django.core.context_processors import csrf
from django.core.urlresolvers import reverse
from django.forms import ModelForm


def index(request):
    if request.method == 'POST':
        post = request.POST
        name = post['name']
        email = post['email']
        f = PatronForm(request.Post)
        new_patron = f.save()
    return render_to_response('patrons/index.html',
                               context_instance=RequestContext(request))

#html
 <body>
    <h1>/Picture Taker/</h1>



    <form aciton="." name="patron" method="post" >
    {% csrf_token %}

        <label>
            <div>name</div> <input type="text" name="name" id="name" value="{{name}}">
        </label>
        <label>
            <div>email</div> <input type="text" name="email" id="email" value="{{email}}">
        </label>

        <div class="error">{{error}}</div>
        <input type="submit" value="Submit">
    </form>

</body>

どんな助けでも大歓迎です

4

2 に答える 2

4

すべての

post = request.POST
name = post['name']
email = post['email']
f = PatronForm(request.Post)
new_patron = f.save()

次のように書き直すことができます(の場合に注意してくださいrequest.POST):

f = PatronForm(request.POST)
new_patron = f.save()

ただし、保存する前にフォームのエラーをチェックする必要があるため、次のようになります。

f = PatronForm(request.POST)
if f.is_valid():
    new_patron = f.save()

フォームタグにもタイプミスがあります。これは「aciton」ではなく「action」である必要があります。テンプレートにある{{エラー}}は、ビューに存在するものを参照していません。デバッグ中に、次のようにフォーム自体をレンダリングさせると役立つ場合があります。

{{ form.as_p }}

そのため、フォームの送信でエラーを確認できます。

于 2012-05-31T13:52:49.607 に答える
0

「すべてのフォーラムとチュートリアル」は必要ありません。必要なのは公式のドキュメントだけで、これは明確に説明されています。そのリンクに表示されるコードからの唯一の変更は、form.save()「データを処理する」というビット内に追加する必要があることです(そして、すでに行っているように、render_to_response呼び出しでRequestContextを使用する必要があります)。

変更するもう1つの点は、値だけでなく、テンプレート内のフィールド全体をレンダリングするためにDjangoに依存する必要があることです。

<p>
{{ form.name }} 
{{ form.name.errors }}
</p>

<p>
{{ form.email }}
{{ form.email.errors }}
</p>
于 2012-05-31T13:58:42.813 に答える