0

ハイ。データベースのレコードを変更したいと考えています。私は持っている:

models.py

class People(models.Model):
first_name = models.CharField(max_length = 50)
last_name = models.CharField(max_length = 50)
email = models.EmailField(blank = True)
grade = models.CharField(max_length = 2)

def __unicode__(self):
    return '%s %s' % (self.first_name, self.last_name)

class PeopleForm(ModelForm):
class Meta:
    model = People 

    fields = ['first_name', 'last_name', 'email', 'grade']

ビュー.py

def modify(request, person_pk):
title = 'Creating new program'
template = 'modify.html'

data = People.objects.get(pk = person_pk)

form = PeopleForm(instance=data)
context = {'form': form}
if request.POST:
    form = PeopleForm(request.POST)
    if form.is_valid():
        form.save()
        return HttpResponseRedirect(reverse('/peoples/'))
    else:
        return render_to_response(template, context, context_instance=RequestContext(request))
return render_to_response(template, context, context_instance=RequestContext(request))

urls.py

url(r'^modify/(?P<person_pk>.*)$', views.modify, name='modify'),

フォーム.py

class PeopleForm(forms.ModelForm):

class Meta:
    model = People 
    fields = ('first_name', 'last_name', 'email', 'grade')

そしてテンプレート

<form action="/peoples/" method="post">{% csrf_token %}
<ul>
{{form.as_ul}}
</ul>
<input type="submit" name="submit" value="Modify">
</form>

変更ボタンをクリックしてフィールドに入力し、ボタンを押して前のページに戻ると、データベースからの入力フィールドが更新されない理由がわかりません。何か提案はありますか?

4

1 に答える 1

1

奇妙に見える主な点は、HTMLformタグが"/peoples/"アクションとして含まれていることですが、ここに示すコードでは、その URL がフォーム処理ビューにバインドされていません。action=""ビューをレンダリングしたのと同じ URL に送信されるように、主にフォームで使用します。

form次に、ビューでpython 変数を再定義すると、次のようになります。

if request.POST:
    form = PeopleForm(request.POST)

old をコンテキストに既に割り当てておりform、再割り当てしないでください。したがって、フォームが有効でない場合、エラーや送信された値は表示されません。

POSTビューがデータで呼び出されないなど、フォームアクションが間違っている場合、これはもちろん無関係です。

于 2013-11-03T23:11:59.953 に答える