Django CreateView - 忽略POST测试的默认值

时间:2015-05-07 16:35:11

标签: python django

我有一个简单的创建视图,用于具有默认值字段的简单模型。我想通过仅提供没有默认值的字段来测试此设置。 测试失败,因为数据库中没有创建任何对象。玩过印刷品后,我知道以下内容: 模型clean()传递,并提供默认值。 回复声称"此字段是必填字段。"对于maxVar和minVotes。 (并且发送两个值可以让测试通过。)

失败的测试是:

from django.test import TestCase
from django.utils import timezone
from django.core.urlresolvers import reverse
import datetime

from testcase.models import Poll

class PollCreateTest(TestCase):
    def test_create_with_description_only(self):
       """description should be sufficient to create a poll."""
        self.assertEqual(Poll.objects.count(), 0)
        x = self.client.post(reverse('rating:create'), {'description':'A Poll'})
        #print x
        self.assertEqual(Poll.objects.count(), 1)

使用相应的models.py:

from django.db import models
from django.core.urlresolvers import reverse

class Poll(models.Model):
    description = models.TextField()
    pub_date = models.DateTimeField('date published')
    minVotes = models.IntegerField(default=5)
    maxVar = models.FloatField(default = 0.0)
    finished = models.BooleanField(default=False)

和views.py:

from django.shortcuts import render
from django.views import generic

from .models import Poll

class CreateView(generic.edit.CreateView):
    model=Poll
    fields=['description', 'maxVar', 'minVotes']

我想让自己熟悉Django。通过使用自定义clean()方法编写FormView可能可以解决该问题。但我想了解为什么这不起作用,理想情况下,如何解决问题。

我使用Django 1.8和Python 2.7.8。

1 个答案:

答案 0 :(得分:0)

初始值仅用于两个目的:在html表单输入中呈现初始值,以及查看提交的值是否已更改。它不用于验证表单:不将实际数据传递给表单与将初始数据显式更改为空值相同。

由于您需要maxVarminVotes字段(他们没有blank=True),因此不允许删除初始值并且不向表单传递任何数据。如果您希望表单验证,则必须传递它们。