我有一个简单的创建视图,用于具有默认值字段的简单模型。我想通过仅提供没有默认值的字段来测试此设置。 测试失败,因为数据库中没有创建任何对象。玩过印刷品后,我知道以下内容: 模型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。
答案 0 :(得分:0)
初始值仅用于两个目的:在html表单输入中呈现初始值,以及查看提交的值是否已更改。它不用于验证表单:不将实际数据传递给表单与将初始数据显式更改为空值相同。
由于您需要maxVar
和minVotes
字段(他们没有blank=True
),因此不允许删除初始值并且不向表单传递任何数据。如果您希望表单验证,则必须传递它们。