2017-03-04 2 views
0

私は、CreateView内の1つのフィールドに1つのピースデータを入力し、そのフィールドから残りのモデルフィールドの値を計算します。モデルフィールドを計算する

そのため、すべてのデータを尋ねる代わりに、1つのことを求めて残りを計算することができます。

基本的な例:

Model.py

class EggCount(models.Model): 
    crates = models.IntegerField() 
    cartons = models.IntegerField() 
    eggs = models.IntegerField() 

Views.py

class EggCountCreateView(generic.CreateView): 
    model = models.EggCount 
    fields = ['crates'] 
    template_name = 'egg_form.html' 

私は 'カートン' と「卵を記入するために使用する関連する数学'フィールドに追加します。

cartons = crates * 50 
eggs = cartons * 12 

この数学はどこでDjangoに入りますか?モデルでは?ビューのform_valid関数の一部として?どういうわけか、それをモデルやビューから呼び出す必要がありますか?

申し訳ありませんが、私は完全に迷っており、このための最善の方法に明確な答えが見つかりません。

答えて

0

あなたのegg_form.html

<input type="hidden" name="cartons" value=""> <input type="hidden" name="eggs" value="">

にそのような隠しフォームフィールドを使用して、計算を実行し、value属性に結果を格納するためのJavaScript/jQueryのを使用することができます。

+0

感謝。私はDjango/Pythonを厳密に使用したいと考えています。これはわかりやすくするために私の実際のコードを単純化したものです。実際のコードには既にいくつかの方程式がPythonでビルドされています。 – Dan

0

コードの残りの部分を見なければ、私はモデルの中にあなたの数学関数を入れた後、ビューからそれらを呼び出すと、あなたは彼らと一緒に必要なものは何でもやって、あなたはこのような何かをする必要があると思う:

モデル提案、ケビン用の.py

class EggCount(models.Model): 
    crates = models.IntegerField() 
    cartons = models.IntegerField() 
    eggs = models.IntegerField() 

    def cartons(self): 
     cartons = self.crates * 50 

    def eggs(self): 
     eggs = self.cartons * 12 

views.py

class EggCountCreateView(generic.CreateView): 
    model = models.EggCount 
    fields = ['crates'] 
    templates_name = 'egg_form.html' 
    # call the functions within the view 
    cartons = model.cartons() 
    eggs = model.eggs() 
    #then you can do something with the results 
+0

Thanks @ pasta1020。これは面白いアプローチです。私は同様のことをしましたが、モデルに追加するのではなく、方程式を保持するservices.pyファイルを作成し、その後、その論理はビューからform_validで呼び出されます。私はなぜこれが悪い練習であるかについてのカウンター・ポイントを聞くことには開いています。 – Dan

関連する問題