2017-11-18 5 views
0

モデル私のModelFormで後、追加のモデル値は

class Person(models.Model): 
    first_name = models.CharField(blank=False,max_length=256,default='') 
    last_name = models.CharField(blank=False,max_length=256,default='') 
    plan = models.CharField(blank=False,max_length=256,default='') 
    plan_price = models.CharField(blank=False,max_length=256,default='') 

Views.py

if request.method == 'POST': 

    if form.is_valid(): 
     form.save(commit=True) 
     return index(request) 

をModelFormサブクラスではない私は、ユーザーからの3つの値を受け入れる:FIRST_NAME、LAST_NAME、および計画を。私は私が見つけることを試みているものを、フォームからデータベースへの投稿に問題は、私はあなたがこの機能を使用して、そこにコードを書くことができ、あなたのCREATEVIEWでこの

if plan = 'plan1': 
    #set plan_price to '$399' 
else 
    #set plan_price to '$699' 

#then post first_name, last_name, plan, plan_price to database 
+0

計画から料金までの修正マッピングがありますか? – schwobaseggl

答えて

1

によって作成されたオブジェクトのフィールドにアクセスすることができます

if form.is_valid(): 
    person = form.save(commit=False) 
    plans = { 
     'plan1': 399, 
     'plan2': 699, 
     # ... 
    } 
    person.plan_price = plans.get(person.plan, some_default) 
    person.save() 
    return index(request) 
    # you might consider a redirect instead so as not to have the same content on various urls 

プランの価格は常にあなたもモデルのsaveメソッドをオーバーライドして、あなたはそれを持っていたとしてビューを残すことができる計画と一致する必要がある場合:

class Person(models.Model): 
    # ... 
    def save(self, *args, **kwargs): 
     self.plan_price = some_logic(self.plan) 
     super(Person, self).save(*args, **kwargs) 

をしかし、その後、あなたはalltogetherそれとしてプロパティでそのフィールドを置き換えることができます余計なようです。たとえば価格を変更する計画がある場合は、Planという名前と価格のフィールドがあると見なされます。

+0

これは完全に働いたありがとうございました。私は実際に両方の答えをまとめて最終的な作業コードを得ました。とても有難い! –

1

ような何かを言うことができる方法である持っていけない

def form_valid(self, form): 
     if self.object.plan = 'plan1': 
      form.instance.price = 399 
     else: 
      [...] 
     return super(your_class_name, self).form_valid(form) 

あなたは次のことを試すことができself.object.filed

関連する問題