模型
class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province = models.CharField(max_length=30)
country = models.CharField(max_length=50)
website = models.URLField()
表格
from django import forms
class ContactForm(forms.Form):
name = forms.CharField()
address = forms.CharField()
city = forms.CharField()
state_province = forms.CharField()
country = forms.CharField()
website = forms.URLField()
并查看
def test(request):
if request.method=='POST':
form = ContactForm(request.POST)
if form.is_valid():
print form.cleaned_data
p=Publisher()
p.name=form.cleaned_data.get('name')
p.address=form.cleaned_data.get('address')
p.city=form.cleaned_data.get('city')
p.state_province=form.cleaned_data.get('state_province')
p.country=form.cleaned_data.get('country')
p.website=form.cleaned_data.get('website')
p.save()
return HttpResponse("Done")
else:
form = ContactForm()
return render(request, 'contact_form.html', {'form': form})
当提交的表单有效时,我将数据保存到数据库。
但我所做的是从字典form.cleaned_data
中提取每个字段,然后手动将其分配给Publisher
对象的实例,例如p.name=form.cleaned_data.get('name')
我的问题是,有没有办法将form.cleaned_data
字典分配给Publisher
对象。总之,我可以这样做,
p=Publisher()
p=form.cleaned_data
p.save()
答案 0 :(得分:1)
from django import forms
class ContactForm(forms.Form):
class Meta:
model = Publisher
和观点:
def test(request):
form = ContactForm()
if request.method=='POST':
form = ContactForm(request.POST)
if form.is_valid():
publisher = form.save()
return HttpResponse("Done")
return render(request, 'contact_form.html', {'form': form})
答案 1 :(得分:1)
你应该使用ModelForms,它完全适合你的情况..
完整的文档可用here
但我会尝试解释如何将你的案例用于ModelForm(虽然我建议你自己浏览文档然后亲自尝试)
考虑现有模型,创建一个forms.py文件,您需要在其中创建ModelForm类,如下所示:
#Import your model here
from .models import Publisher
from django.forms import ModelForm
class PublisherForm(ModelForm):
class Meta:
model = Publisher
fields = '_all_'
注意:您可以使用'fields'选项告诉Django限制它将在表单中显示的字段。默认情况下,“ all ”用于显示和使用定义的Publisher模型中的所有字段。 创建ModelForm后,您可以使用request.POST(或任何其他方式)填充它
f = PublisherForm(request.POST)
要将数据直接保存到相应的模型,只需调用save()方法即可。请记住,您使用的是ModelForm,而不是常规的forms.Form,这意味着Django现在知道要保存的模型,因此您只需在ModelForm实例上调用.save()。
f.save()
如果您希望在保存之前对填充的表单执行清理操作,也可以这样做。查看文档以获取有关该文档的详细说明。