我使用Django 1.7b2和Django REST框架编写一些测试用例。
有一个自定义用户模型,其birthday
字段添加如下。
class User(AbstractBaseUser):
first_name = models.CharField(max_length=30, blank=True)
last_name = models.CharField(max_length=30, blank=True)
email = models.EmailField(blank=True)
...
...
gender = models.IntegerField(choices=Gender.CHOICES, default=Gender.UNKNOWN)
birthday = models.DateField(default=timezone.datetime.today())
然后我创建了TestAPI。
class ApiTest(TestCase):
def setUp(self):
user, created = User.objects.get_or_create(
username="username",
email="uname@app.com",
first_name="fname",
last_name="lname",
)
self.factory = APIRequestFactory()
self.client = APIClient()
def test_user_put(self):
print self.user.birthday
data = {
"first_name": self.user.first_name,
"last_name": self.user.last_name,
"email": self.user.email,
"gender": self.user.gender,
"birthday": self.user.birthday,
}
response = self.client.put(reverse('user-detail', args=[self.user.pk]), data)
self.assertEqual(response.status_code, 200)
问题在于,当我使用空数据库运行此测试时,它会引发birthday is not in valid
错误,因为测试功能会打印datetime object
而不是date object
。< / p>
但是,在我将几个用户添加到数据库后,它会通过测试。
我用不同的定义(使用日期时间而不是时区等)重复了3-4次,但无法解决问题。
这是我想念的东西还是框架中的潜在错误?
答案 0 :(得分:1)
来自the django docs regarding DateField:
<强> DateField.auto_now_add 强>
首次创建对象时自动将字段设置为现在。用于创建时间戳。请注意,始终使用当前日期;它不仅仅是您可以覆盖的默认值。
所以尝试编写这样的代码:
birthday = models.DateField(auto_now_add=True).