我在学习django时尝试编写一个小应用程序。我试图创建一个django表单来在数据库中创建我的一个模型的实例。我跟着youtube django guide来完成这个。我编写了类似的代码,但程序似乎并没有将创建的模型保存在数据库中。
这是我的型号代码:
from django.db import models
# Create your models here.
class VoteType(models.Model):
pub_date = models.DateTimeField('date published')
name = models.CharField(max_length=50)
def __unicode__(self):
return self.name
class Vote(models.Model):
name = models.CharField(max_length=50)
image = models.ImageField(upload_to= "images/vote/")
rating = models.IntegerField(default=0)
vote_type = models.ForeignKey(VoteType)
vote_type.null = True
def __unicode__(self):
return self.name
这是我的创建视图代码:
def create(request):
form = VoteTypeForm(request.POST or None)
print request
instance = form.save(commit=False)
print instance
print instance.name
instance.save
print instance.pub_date
context = RequestContext(request,{
'form': form,
})
return render(request, 'Vote/create.html', context)
这是我的create.html
<form method = 'POST' action = ''>{%csrf_token %}
{{ form }}
<input type = 'submit' value="create"/>
</form>
这是网址(以防万一):
urlpatterns = [
#url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^$', views.index, name='index'),
#url(r'^(?P<pk>[0-9]+)/results/$', views.ResultsView.as_view(), name='results'),
url(r'^(?P<pk>[0-9]+)/voting/$', views.voting, name='voting'),
url(r'^create/$', views.create, name='create'),
]
我不知道代码有什么问题。当我转到页面时,键入数据并单击按钮创建,它会打印数据名称和数据pub_date。当我去python控制台并输入VoteType.objects.all()时,它并没有显示我新创建的数据。
答案 0 :(得分:2)
您的观点存在很多问题。
首先,您永远不会调用is_valid()
,因此您不会检查表单是否实际验证。
但主要的问题是你从不调用save方法:你只引用它。我不确定为什么你首先在表单中使用commit=False
,但是这样做后你需要instance.save()
来实际将它保存到数据库中。不过,首先要做form.save()
会更容易。
答案 1 :(得分:2)
您没有为实例对象调用方法save。
将instance.save
更改为instance.save()