【发布时间】:2009-08-03 18:06:07
【问题描述】:
在 Django 中,如何将 Form 与 Model 关联起来,以便将输入到表单中的数据插入到与 Model 关联的数据库表中?如何将该用户输入保存到该数据库表中?
例如:
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()
视图中的代码将输入的数据保存到数据库:
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 看起来绝对是一个更清洁的解决方案。
【问题讨论】:
-
实际上,我确信 Guido 知道。可能还有其他一些。