无法在数据库中保存表单的实例。 Django的

时间:2015-07-01 10:25:23

标签: python django django-forms

我在学习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()时,它并没有显示我新创建的数据。

2 个答案:

答案 0 :(得分:2)

您的观点存在很多问题。

首先,您永远不会调用is_valid(),因此您不会检查表单是否实际验证。

但主要的问题是你从不调用save方法:你只引用它。我不确定为什么你首先在表单中使用commit=False,但是这样做后你需要instance.save()来实际将它保存到数据库中。不过,首先要做form.save()会更容易。

答案 1 :(得分:2)

您没有为实例对象调用方法save。

instance.save更改为instance.save()