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

Python 在views.py而不是modelform中将其他模型值发布到数据库,python,django,django-models,django-forms,django-views,Python,Django,Django Models,Django Forms,Django Views,模型 Views.py 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=''

模型

Views.py

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='')
在我的modelForm中,我接受来自用户的3个值:first\u name、last\u name和plan。我没有任何问题,张贴到数据库的形式,我想找出的是我如何可以说这样的话

if request.method == 'POST':

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

在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

您可以通过在createview中的
self.object.field

访问创建的对象字段。您可以使用此函数并在其中编写代码

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

您可以通过
self.object.field

访问创建的对象字段。您可以尝试以下操作:

    def form_valid(self, form):
        if self.object.plan = 'plan1':
            form.instance.price = 399
        else:
            [...]
        return super(your_class_name, self).form_valid(form)
如果计划价格始终应与计划匹配,则还可以覆盖模型的
保存
方法,并保持视图不变:

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

但是,您可以将该字段全部替换为属性,因为它看起来是多余的。例如,如果计划改变价格,我会考虑一个具有名称和价格字段的<代码>计划>代码>模型。

< p>您可以尝试如下:

    def form_valid(self, form):
        if self.object.plan = 'plan1':
            form.instance.price = 399
        else:
            [...]
        return super(your_class_name, self).form_valid(form)
如果计划价格始终应与计划匹配,则还可以覆盖模型的
保存
方法,并保持视图不变:

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

但是,您可以将该字段全部替换为属性,因为它看起来是多余的。例如,如果计划改变价格,我会考虑一个具有名称和价格字段的<代码>计划>代码> < /P>你有从计划到价格的固定映射吗?你有一个从计划到价格的固定映射吗?这是完美的,谢谢。实际上,我把这两个答案放在一起得到了最终的工作代码。非常感谢!这很有效,谢谢你。实际上,我把这两个答案放在一起得到了最终的工作代码。非常感谢!