无法在数据库中保存表单实例。姜戈
Can't save instance of a form on database. Django
我在学习 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() 时,它不会在那里显示我新创建的数据。
你的观点有很多问题。
首先,您从不调用 is_valid()
,因此您不会检查表单是否确实有效。
但主要问题是您从不调用保存方法:您只引用它。我不确定你为什么首先在表单保存中使用 commit=False
,但是这样做之后你需要做 instance.save()
才能将它实际保存到数据库中。不过,一开始只做 form.save()
会更容易。
您没有为实例对象调用保存方法。
将instance.save
改为instance.save()
我在学习 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() 时,它不会在那里显示我新创建的数据。
你的观点有很多问题。
首先,您从不调用 is_valid()
,因此您不会检查表单是否确实有效。
但主要问题是您从不调用保存方法:您只引用它。我不确定你为什么首先在表单保存中使用 commit=False
,但是这样做之后你需要做 instance.save()
才能将它实际保存到数据库中。不过,一开始只做 form.save()
会更容易。
您没有为实例对象调用保存方法。
将instance.save
改为instance.save()