3

データベースにインスタンスを追加するためのビューとテンプレートを作成した ModelForm があります。ユーザーがボタンをクリックしたときにこれを編集可能に拡張しようとしていますが、そうするとフォーム/テンプレートページが表示され、「このフィールドは必須です」というメッセージが表示されますが、事前に入力されているのではなく、すべてのフィールドが空です渡したインスタンスですが、値を元とは異なる値に編集すると、データベースで正しいインスタンスが更新されます。したがって、主キーを渡していますが、値が表示されません。誰かが私が間違っていることを教えてくれるなら、私はそれを感謝します、ああ、私はフォームの追加に基づいてこのポストDjango編集フォームを使用していますか? 基礎として私をそこに送らないでください。

ここに私のファイルがあります

モデルフォーム

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'),
4

1 に答える 1

3

@xizorは、ボタンの代わりにリンクを使用してエディションフォームにリダイレクトします。これは、ボタンを使用すると、おそらくビューに投稿を送信するためです。

PS:私の英語を許してください、それをもっと便利にするのが正しいと思うなら、この答えを編集してください。

于 2011-11-11T18:38:20.190 に答える