gpt4 book ai didi

python - 如何将数据从 ModelForm 保存到 Django 中的数据库?

转载 作者:太空狗 更新时间:2023-10-29 17:26:23 27 4
gpt4 key购买 nike

我有一个模型:

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>

问题

如何将表单中的数据保存到数据库中?

一些附加信息:

model.py 包含

class Project(models.Model):
title = models.CharField(max_length=150)
url = models.URLField()
manager = models.ForeignKey(User)
timestamp = models.DateTimeField()

我的尝试

我尝试以下一种方式实现解决方案(注意:offset = 项目名称):

def cost(request, offset):
if request.method == 'POST':
form = CostForm(request.POST)
if form.is_valid():
instance = form.save(commit=False)
instance.project = Project.objects.filter(title=offset)
instance.date = request.date
instance.cost = request.cost
instance.save()
return HttpResponseRedirect('/')
else:
form = CostForm()

但它不起作用:(

最佳答案

有些事情看起来不对:

  1. Project.objects.filter() 将返回一个查询集。使用 Project.objects.get() 代替...它只会返回一个 Project 对象

  2. 您不需要明确设置成本和日期,这将由您的 instance=form.save(commit=False)

  3. 处理
  4. 您没有在模板中使用表单...

试试这个:

模板:

<form action="/cost/{{ project }}/" method="post" accept-charset="utf-8">
{{form.as_p}}
<p><input type="submit" value="Add"></p>
</form>

查看:

def cost(request, offset):
if request.method == 'POST':
form = CostForm(request.POST)
if form.is_valid():
instance = form.save(commit=False)
instance.project = Project.objects.get(title=offset)
instance.save()
return HttpResponseRedirect('/')
else:
form = CostForm()

render_to_response('path/to/template.html',{'form':form},context_instance=RequestContext(request))

此外,我认为您需要将 blank=True 添加到 Cost 模型中的 models.ForeignKey(Project)。这将允许您的 ModelForm 进行验证。

关于python - 如何将数据从 ModelForm 保存到 Django 中的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2837229/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com