无法在数据库中保存表单实例。姜戈

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