将其他模型值发布到views.py中的数据库而不是modelform

时间:2017-11-18 18:52:20

标签: python django django-models django-forms django-views

模型

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和plan。从表单发布到数据库我没有任何问题,我想知道的是我怎么能说这样的话

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

2 个答案:

答案 0 :(得分:1)

在您的createview中,您可以使用此功能并在那里编写代码

    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

访问创建的对象字段

答案 1 :(得分:1)

您可以尝试以下操作:

save

如果计划价格始终与计划相符,您还可以覆盖模型的class Person(models.Model): # ... def save(self, *args, **kwargs): self.plan_price = some_logic(self.plan) super(Person, self).save(*args, **kwargs) 方法并保留视图:

Plan

但是,然后,您可以将属性全部替换为该字段,因为它似乎是多余的。例如,如果计划改变价格,我会考虑一个带有名称和价格字段的size模型。