DjangoフォームとModelFormクラスのかなり魅力的なプロパティを使用するのは難しいです。特に、モデルインスタンスでインスタンス化されたときにフォームインスタンスにデータが関連付けられているかどうかを判断するのに問題があります。Djangoフォームは、モデルインスタンスでインスタンス化されていても、バインドされていないと表示されます。
まずここforms.py
from django.forms import ModelForm
from .models import ItemCoeff, MonthCoeff
class MonthForm(ModelForm):
"""A class that defines an HTML form that will be constructed for interfacing with the Monthly Coefficients"""
title='Set Month Coefficient'
class Meta:
model=MonthCoeff
fields = ['first_of_month', 'product_category', 'month_coeff', 'notes']
class ItemForm(ModelForm):
"""
A class that defines a Django HTML form to be constructed for interfacing with the ItemCoeff model.
"""
title='Set Item Coefficient'
class Meta:
model=ItemCoeff
fields = ['item_num','item_name','item_coeff','notes']
でフォームのかなり簡単なセットを見てみると、私たちは、私は、フォーム
def set_month_form(request, myid=False):
if myid:
mcoeff=MonthCoeff.objects.get(id=myid)
form=MonthForm(instance = mcoeff)
categories = False
else:
form=MonthForm()
categories=list(MonthCoeff.objects.values('product_category').distinct())
import pdb; pdb.set_trace()
return render(request,'coeffs/forms/django_form.html',{'form':form, 'user': request.user})
そして、私は、レンダリングしていますを使用views.py
の一部を取得次です私のテンプレートのフォーム私は、私の送信ボタンのキャプションを設定するis_boundプロパティを使用しようとしています:
{% if form.is_bound %}
<button type="submit" name="button">Update</button>
{% else %}
<button class="btn btn-lg btn-primary" type="submit" name="button">Add</button>
{% endif %}
ただし、この方法では常にelse
という条件が生成されます。私が気づいたと思いますが、私はview.py
コードにpdbトレースを設定しました。form.is_bound
のレンダリングの直前にフォームオブジェクトを調べると、False
が返されます。これは、form['first_of_month']
がフォームの作成に使用されたMonthCoeffインスタンスに関連付けられた値を返す場合でも発生します。
私はそれ以外はすばらしいから期待するためにis_boundプロパティが応答しない理由についての洞察を持っている人は誰ですか?Django Docs?
おかげで、。私は "バウンド"と "インスタンス"を区別するのに問題がありました。私はあなたがPythonでbooleanとしてインスタンスなどのプロパティを評価できることを忘れていました。よりクレイジーな言語で作業するには時間がかかりすぎる。 – RyanM