2017-03-08 3 views
0

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

答えて

1

しかし、データにはバインドしていません。インスタンスパラメータを指定しましたが、それはまったく同じではありません。初期値を提供するモデルインスタンスと保存時に更新するものとフォームを関連付けるだけです。バインドとバインドは、通常はPOSTからデータを渡すかどうかによって決まります。

インスタンスがあるのか​​どうかに応じて、ボタンを変更したい場合は、ちょうどそれを実行します。魔法のように動作

{% if form.instance %} 
     <button type="submit" name="button">Update</button> 
{% else %} 
     <button class="btn btn-lg btn-primary" type="submit" name="button">Add</button> 
{% endif %} 
+0

おかげで、。私は "バウンド"と "インスタンス"を区別するのに問題がありました。私はあなたがPythonでbooleanとしてインスタンスなどのプロパティを評価できることを忘れていました。よりクレイジーな言語で作業するには時間がかかりすぎる。 – RyanM

関連する問題