[英]Django : saving form to database
所以我有以下模型:
class Recipe(models.Model):
title = models.CharField(max_length=100)
ingredients = models.TextField(max_length=200,help_text="Put the ingredients required for the recepies here !")
instructions = models.TextField(max_length=500)
posted_on = models.DateTimeField('Posted On')
def __unicode__(self):
return self.title
现在我想要做的是我在html中有一个名为add.html的前端,其形式如下:
<!DOCTYPE html>
<head><title>New Recipe</title></head>
<body>
<h1>Add A new Recipe Here</h1>
<form action="/recipes/add/" method="post">
{% csrf_token %}
<label>ID<label>
<input type="number" name="id"></input><br />
<label>Title </label>
<input type ="text" name="title"><br />
<label>Ingredients</label>
<input type="text" name="ingredients" />
<br />
<label>Instructions </label>
<input type="text" name="instructions" />
...
以下是我使用ModelForm
保存表单的方法:
def add(request):
if request.method == 'POST':
form = RecipeForm(request.POST)
if form.is_valid():
form.save()
#redirect
return HttpResponse("Thank you")
else:
return HttpResponse("Form Not Valid")
else:
form = RecipeForm()
context = Context({'form':form,})
context.update(csrf(request))
template = loader.get_template('myApp/add.html')
return HttpResponse(template.render(context))
当我运行这个时,我总是得到"form Invalid"
所以现在我的问题是,html表单add.html是否应该将EXACT映射作为我的模型配方?
如果是,那么
types
(对于posted_on
)? syncdb
隐式创建的id
? 我刚刚开始学习Django
1)更改posted_on
以自动添加发布日期。
posted_on = models.DateTimeField(auto_now_add=True)
2)Django将为您处理pk id创建。
3)为什么不为此使用ModelForm
? 文档 。
class RecipeForm(ModelForm):
class Meta:
model = Recipe
您可以在fields
使用exclude
或include
,以确保您的表单仅包含您希望包含在表单中的Recipe
中的字段。
models.py
class Recipe(models.Model):
title = models.CharField(max_length=100)
ingredients = models.TextField(max_length=200,help_text="Put the ingredients required for the recepies here !")
instructions = models.TextField(max_length=500)
posted_on = models.DateTimeField(auto_add_now=True)
def __unicode__(self):
return self.title
page.html中
<!DOCTYPE html>
<head><title>New Recipe</title></head>
<body>
<h1>Add A new Recipe Here</h1>
<form action="/recipes/add/" method="post">
{% csrf_token %}
{% form.as_p %}
<input type="submit" value="submit">
</form>
</body>
</html>
views.py
from django.contrib import messages
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.shortcuts import render
def add(request):
if request.method == 'POST':
form = RecipeForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('app_name:url'))
else:
messages.error(request, "Error")
return render(request, 'myApp/add.html', {'form': RecipeForm()})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.