[英]Save form data in Django
I'm trying to set up a form in Django and save the data to my database, without using a ModelForm. 我正在尝试在Django中设置一个表单并将数据保存到我的数据库,而不使用ModelForm。 My form is working, but the part I am stuck on is how to process the form data and save it within the view. 我的表单正在运行,但我坚持的部分是如何处理表单数据并将其保存在视图中。 As you can see, after 'if form.is_valid():' I am stuck and cannot think of the right code. 正如你所看到的,在'if form.is_valid()之后:'我陷入了困境,无法想到正确的代码。
# models.py
from django.db import models
class Listing(models.Model):
business_name = models.CharField(max_length=80)
business_email = models.EmailField()
business_website = models.CharField(max_length=80)
business_phone = models.CharField(max_length=80)
# forms.py
from django import forms
class NewBusinessForm(forms.Form):
business_name = forms.CharField(label='Business Name', max_length=100)
business_phone = forms.CharField(label='Phone Number', max_length=100)
business_email = forms.EmailField(label='Email Address', max_length=100)
business_website = forms.CharField(label='Web Site', max_length=100)
# views.py
from django.shortcuts import render
from django.http import HttpResponseRedirect
from .forms import NewBusinessForm
def new_business(request):
if request.method == 'POST':
form = NewBusinessForm(request.POST)
if form.is_valid():
# process form data
return HttpResponseRedirect('/')
else:
form = NewBusinessForm()
return render(request, 'directory/new.html', {'form': form})
You need to create the object and set all fields manually. 您需要创建对象并手动设置所有字段。 Here is an example. 这是一个例子。
def new_business(request):
if request.method == 'POST':
form = NewBusinessForm(request.POST)
if form.is_valid():
# process form data
obj = Listing() #gets new object
obj.business_name = form.cleaned_data['business_name']
obj.business_email = form.cleaned_data['business_email']
obj.business_phone = form.cleaned_data['business_phone']
obj.business_website = form.cleaned_data['business_website']
#finally save the object in db
obj.save()
return HttpResponseRedirect('/')
....
Note that saving object may fail if field values do not follow the constraint. 请注意,如果字段值不遵循约束,则保存对象可能会失败。 So you need to take care of that. 所以你需要照顾它。
In Django 2.0, I think there is an easy way, use FormView in class based view. 在Django 2.0中,我认为有一种简单的方法,在基于类的视图中使用FormView 。
from django.views.generic.edit import FormView
class newBusiness(FormView):
form_class = NewBusinessForm
success_url ="/"
template_name = "temp.html"
def form_valid(self, form):
form.save()
return redirect(self.success_url )
I did not test it to run, but i think it will be OK. 我没有测试它运行,但我认为它会没问题。 More at https://docs.djangoproject.com/en/2.0/topics/forms/modelforms/ 更多信息, 请访问https://docs.djangoproject.com/en/2.0/topics/forms/modelforms/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.