Python 如何在django中将模型表单中的数据保存到数据库中?
我有一个模型:Python 如何在django中将模型表单中的数据保存到数据库中?,python,django,Python,Django,我有一个模型: class Cost(models.Model): project = models.ForeignKey(Project) cost = models.FloatField() date = models.DateField() 对于模型,我创建了一个ModelForm类: class CostForm(ModelForm): class Meta: model = Cost fields = ['date',
class Cost(models.Model):
project = models.ForeignKey(Project)
cost = models.FloatField()
date = models.DateField()
对于模型,我创建了一个ModelForm
类:
class CostForm(ModelForm):
class Meta:
model = Cost
fields = ['date', 'cost']
使用view.py
:
def cost(request, offset):
if request.method == 'POST':
# NOTE: How to save the data in DB?
return HttpResponseRedirect('/')
else:
form = CostForm()
下一个模板:
<form action="/cost/{{ project }}/" method="post" accept-charset="utf-8">
<label for="date">Date:</label><input type="text" name="date" value={{ current_date }} id="date" />
<label for="cost">Cost:</label><input type="text" name="cost" value="0" id="cost" />
<p><input type="submit" value="Add"></p>
</form>
我的尝试
我尝试以下一种方式实现该解决方案(注意:offset=项目名称):
但它不起作用:(有几件事情看起来不对劲:
Project.objects.filter()
将返回一个queryset。改用Project.objects.get()
它将只返回一个Project
对象instance=form.save(commit=False)
<form action="/cost/{{ project }}/" method="post" accept-charset="utf-8">
{{form.as_p}}
<p><input type="submit" value="Add"></p>
</form>
此外,我认为您需要将
blank=True
添加到模型中。在成本模型中添加ForeignKey(Project)
。这将允许您的模型表单进行验证。我找到了解决方案。按如下所示重写view.py
:
def cost(request, offset):
if request.method == 'POST':
project = Project.objects.get(title=offset)
date = request.POST.get('date', '')
cost = request.POST.get('cost', '')
cost_obj = Cost(project=project, date=date, cost=cost)
cost_obj.save()
return HttpResponseRedirect('/')
代码的其余部分没有更改。我是这样做的:
def save_model(self, request, obj, form, change):
obj.save()
要修改某些内容,请通过以下方式执行:
obj.xyz = 'something'
obj.save()
这是相关的:。该示例非常准确。另外,请阅读以下内容:
def cost(request, offset):
if request.method == 'POST':
project = Project.objects.get(title=offset)
date = request.POST.get('date', '')
cost = request.POST.get('cost', '')
cost_obj = Cost(project=project, date=date, cost=cost)
cost_obj.save()
return HttpResponseRedirect('/')
def save_model(self, request, obj, form, change):
obj.save()
obj.xyz = 'something'
obj.save()