使用表单django将数据保存到数据库

时间:2014-04-24 18:28:43

标签: python django forms

模型

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()

2 个答案:

答案 0 :(得分:1)

ModelForms

的完美候选人
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()

如果您希望在保存之前对填充的表单执行清理操作,也可以这样做。查看文档以获取有关该文档的详细说明。

相关问题