在 Django 中,如何将表单与模型关联起来,以便将表单中输入的数据插入到与模型关联的数据库表中?如何将该用户输入保存到该数据库表中?
例如:
class PhoneNumber(models.Model):
FirstName = models.CharField(max_length=30)
LastName = models.CharField(max_length=30)
PhoneNumber = models.CharField(max_length=20)
class PhoneNumber(forms.Form):
FirstName = forms.CharField(max_length=30)
LastName = forms.CharField(max_length=30)
PhoneNumber = forms.CharField(max_length=20)
我知道有一个类用于从模型创建表单,但即使在那里,我也不清楚数据实际上如何到达数据库。在继续讨论节省时间的部分之前,我想先了解内部工作原理。如果文档中有一个简单的示例说明其工作原理,我已经错过了。
谢谢。
更新: 需要明确的是 - 我确实了解 ModelForm 工具,我正在尝试弄清楚如何在没有该工具的情况下做到这一点 - 部分原因是我可以更好地理解它首先在做什么。
已回答:
在答案的帮助下,我得出了这个解决方案:
表单定义:
class ThisForm(forms.Form)
[various Field assignments]
model = ThisModel()
View 中的代码将输入的数据保存到数据库:
if request_method == 'POST':
form = ThisForm(request.POST)
if form.is_valid():
for key, value in form.cleaned_data.items():
setattr(form.model, key, value)
form.model.save(form.model)
此后,在浏览器表单中输入的数据就位于数据库表中。
请注意,调用模型的 save() 方法需要将模型本身作为参数传递。我不知道为什么。
警告:我是新手。这成功地将数据从浏览器获取到数据库表,但只有上帝知道我在此过程中忽略了什么、错过了什么或彻底破坏了什么。 ModelForm 绝对看起来是一个更干净的解决方案。
最佳答案
当我第一次使用表单和模型(不使用 ModelForm)时,我记得做的是检查表单是否有效,这将设置清理后的数据,手动将数据从表单移动到模型(或其他任何方式)处理你想要做的事情),然后保存模型。正如您所知,当您的表单与您的模型完全(甚至非常接近)匹配时,这是极其乏味的。通过使用 ModelForm(因为您说您不太确定它是如何工作的),当您保存 ModelForm 时,它会根据模型规范使用表单数据实例化一个对象,然后为您保存该模型。总而言之,数据流从 HTML 表单,到 Django 表单,到 Django 模型,再到数据库。
针对您的问题的一些实际代码:
将浏览器表单数据获取到表单对象中:
if request.method == 'POST':
form = SomeForm(request.POST)
if form.is_valid():
model.attr = form.cleaned_data['attr']
model.attr2 = form.cleaned_data['attr2']
model.save()
else:
form = SomeForm()
return render_to_response('page.html', {'form': form, })
在模板页面中,您可以使用表单执行以下操作:
<form method="POST">
{{ form.as_p }}
<input type="submit"/>
</form>
这只是我从 here 中提取的一个示例.
关于python - 如何将表单的输入与 Django 中的模型关联起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1223763/