Python 在views.py而不是modelform中将其他模型值发布到数据库
模型 Views.pyPython 在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=''
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>你有从计划到价格的固定映射吗?你有一个从计划到价格的固定映射吗?这是完美的,谢谢。实际上,我把这两个答案放在一起得到了最终的工作代码。非常感谢!这很有效,谢谢你。实际上,我把这两个答案放在一起得到了最终的工作代码。非常感谢!