2011-11-11 25 views
3

データベースにインスタンスを追加するためのビューとテンプレートを作成したModelFormがあります。私は今、ユーザーがボタンをクリックしたときにこれを編集可能にしようとしていますが、フォーム/テンプレートページが表示され、「このフィールドは必須です」というメッセージが表示されますが、私が渡したインスタンスですが、元のものとは異なる値に編集すると、データベースで正しいインスタンスが更新されます。したがって、プライマリキーを渡していますが、値のいずれも表示されません。誰かが私が間違っていることを伝えることができれば、私はそれを感謝します、ああ、私はこの投稿Django edit form based on add form?を使っています。ここでModelFormのDjango編集テンプレートに値が入力されていません

は私のファイル

のModelForm

class CreditCardForm(forms.ModelForm): 
class Meta: 
    model = CreditCard 
    fields = ('name_on_card','card_number','contact_number_on_card') 

ビュー

def edit(request, id=None, template_name='article_edit_template.html'): 
if id: 
    print "Edit Mode" 
    card = get_object_or_404(CreditCard, pk=id) 
    if card.card_owner != request.user: 
     raise HttpResponseForbidden() 
else: 
    print "Create Mode" 
    card = CreditCard(card_owner=request.user) 

if request.POST: 
    print "request.POST" 
    form = CreditCardForm(request.POST, instance=card) 
    if form.is_valid(): 
     print "is_valid()" 
     form.save() 

     # If the save was successful, redirect to another page 
     # redirect_url = reverse(article_save_success) 
     return HttpResponseRedirect('/cards/') 
else: 
    print "else" 
    form = CreditCardForm(instance=card) 

return render_to_response(
    'create_credit.html', 
    {'form': form,}, 
    context_instance=RequestContext(request) 
) 

テンプレートです

{% include "base.html" %} 

<form action="" method="post">{% csrf_token %} 
<fieldset> 
<legend>Required</legend> 

<div class="fieldWrapper"> 
    {{ form.name_on_card.errors }} 
    <label for="id_topic">Name as it appears on card:</label> 
    {{ form.name_on_card }} 
</div> 
<div class="fieldWrapper"> 
    {{ form.card_number.errors }} 
    <label for="id_topic">Last 6 digits of card number:</label> 
    {{ form.card_number }} 
</div> 
</fieldset> 

<fieldset> 
<legend>Optional</legend> 
<!-- This is for Credit Card's Only --> 
<div class="fieldWrapper"> 
    {{ form.contact_number_on_card.errors }} 
    <label for="id_topic">Institution contact number: 1-</label> 
    {{ form.contact_number_on_card }} 
</div> 
</fieldset> 
<p><input type="submit" value="Save"></p> 
</form> 

のURL

url(r'^new/credit/$', views.edit, {}, 'crds_newCredit'), 
url(r'^edit/credit/(?P<id>\d+)/$', views.edit, {}, 'crds_editCredit'), 

答えて

3

@xizorあなたはおそらくビューにポストを送信しているボタンでbecasue、代わり版のフォームにリダイレクトするには、ボタンをリンクを使用します。

PS:私の英語を許してください。この答えを編集してください。もっと役に立つと思ったら、この回答を編集してください。

+0

ブリリアント!それは、私はこの種のことについてあまりよく分かりません。なぜそうなのか教えてください。 POSTを送信してもリンクが機能しないのはなぜですか? – xizor

+0

ボタンも使用できますが、リンクとしてボタンのonClickイベントにjavascript関数を入れて、ページをエディションのフォームにリダイレクトします。しかし、ボタンをフォームタグで囲み、属性acction = 'post'をこのフォームに追加すると、そのボタンでサブミットすると、ビューに投稿メッセージが送信されます。 – Yasel

関連する問題