0

私が間違っていることを理解することはできません。フォームを投稿すると、不足しているフィールドがたくさんあります。再表示されますが、エラーは出力されません。以下はフォーム、ビュー、テンプレートです

私はモデルフォームを持っています:

class HotelOfferForm(forms.ModelForm):
    """
    form for Ensemble personel to complete to make offer live
    """
    class Meta:
        model = Hoteloffer
        widgets = {
            'standard_Service':  forms.CheckboxSelectMultiple(),
            'leisure_Service':  forms.CheckboxSelectMultiple(),
            'dining_Service':  forms.CheckboxSelectMultiple(),
            'lto_start_date': SelectDateWidget(),
            'lto_end_date': SelectDateWidget(),
        }

そしてビュー:

def edit_hotel(request, hotel_id):
    print 'in edit_hotel'
    if request.method == 'POST':
        print "in POST"
        print hotel_id, type(hotel_id)
        if int(hotel_id) != 0:
            print 'got hotel_id', hotel_id
            hotel = Hoteloffer.objects.get(pk=hotel_id)
            f = HotelOfferForm(request.POST, instance=hotel)
        else:
            print 'no hotel id available'
            f = HotelOfferForm(request.POST)
        print "Is it valid?", f.is_valid()
        if f.is_valid():
            hotel = f.save()
            return redirect("/hotels/list_hotels/", context_instance=RequestContext(request))

    try:
        hotel = Hoteloffer.objects.get(pk=hotel_id)
        f = HotelOfferForm(instance=hotel)
    except:
        f = HotelOfferForm()
    print "about to render", f.errors # ******* prints nothing???
    return render_to_response('hotels/hotel_form.html', {'f': f, 'title': hotel.title}, context_instance=RequestContext(request))

レンプレート:

{% extends 'base.html' %}
{% block title %}Ensemble Travel Group Offer Entry System: Hotel {{title}}{% endblock %}
{% block content %}
<!--{{ f.name }} {{f.errors}}-->
<!-- am i here? -->
<h2>{{ title }}</h2>
{% if f.errors %}
    <p style="color: red;">
        Please correct the error{{ f.errors|pluralize }} below.
        {{ f.errors }}
    </p>
{% endif %}

<form action="" method="post">{% csrf_token %}
  <table>
  {{ f.as_table }}
  </table>
<input type='submit' id='submit' name='submit' value='Submit' />
</form>
{% endblock %}            
4

1 に答える 1

2

フォームが is_valid を渡さない場合、次のコードにフォールバックしています:

try:
    hotel = Hoteloffer.objects.get(pk=hotel_id)
    f = HotelOfferForm(instance=hotel)
except:
    f = HotelOfferForm()

エラーのあるフォームを表示したい場合はrequest.POST、引数としてフォームを返す必要があります

また、Django のクラス ベースのビューを調べることをお勧めします。特に UpdateView は、この種の編集ビューでうまく機能します。

于 2012-06-14T14:58:16.090 に答える