0

データベースのレコードを更新する ModelForm を作成しようとしていますが、何らかの理由で機能しません。空白になります。ここで何が間違っていますか?

これは私のforms.pyです:

class PageForm(ModelForm):
    class Meta:
        model = Page

これは私のviews.pyです:

def detail(request, page_id):
    p = get_object_or_404(Page, pk=id)
    if request.method == 'POST':
        form = PageForm(request.POST, instance=p)
        if form.is_valid():
           form.save()
           messages.success(request, "Detail updated successfully.")
           return HttpResponseRedirect('/thanks/')
    return render(request, 'pages/pageform.html', {
    'form': PageForm(instance=p),
})

これは私のmodel.pyです:

class Page(models.Model):
    pub_date = models.DateTimeField('date published')
    title = models.CharField(max_length=255)
    keywords = models.CharField(max_length=255)
    description = models.CharField(max_length=255)
    content = models.TextField()
    def __unicode__(self):
        return self.title

これは私の pageform.html です

<form action="/detail/" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>

これは私の urls.py です

urlpatterns = patterns('',
    url(r'^page/(?P<id>\d+)/$', 'detail', name='detail'),
)
4

2 に答える 2

0

getリクエスト用のフォームも作成する必要があります。

ビューを次のように更新します

def detail(request, page_id):
    if request.method == 'POST':
    ....
    else:
        p = Page.objects.get(pk=page_id)
        form = PageForm(instance=p)
    ....

また、エラーが表示されないため、フォームが無効な場合は新しいフォームを作成しないでください。

于 2013-01-26T07:36:44.510 に答える
0

キャシーとローハン、ありがとう!これは私のために働いた:

ビュー.py

def detail(request, page_id):
    p = get_object_or_404(Page, pk=page_id)
    if request.method == 'POST':
        form = PageForm(request.POST or None, instance=p)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/thanks/')
    else:
        form = PageForm(instance=p)
    return render_to_response('pages/detail.html', {'page': p, 'form': form}, context_instance=RequestContext(request))

urls.py:

urlpatterns = patterns('',
    url(r'^page/(?P<page_id>\d+)/$', 'pages.views.detail'),
)
于 2013-01-26T16:34:34.630 に答える