![](/img/trans.png)
[英][u"'' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."]
[英]["'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."] will show up if I check for full_clean()
當我嘗試使用full_clean()
查看我的對象是否有效時,出現以下錯誤。
django.core.exceptions.ValidationError: {'schedule_date': ["'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."]}
我已經嘗試了這里推薦的所有格式,但它們都不適合我:
當我創建像Object.objects.create(...)
這樣的對象時,我不會出錯
這是我的models.py
:
from datetime import datetime, timedelta, date
from django.db import models
from django import forms
from django.utils import timezone
from django.core.exceptions import ValidationError
from userstweetsmanager.constants import LANGUAGE_CHOICES
def password_validator(value):
if len(value) < 6:
raise ValidationError(
str('is too short (minimum 6 characters)'),
code='invalid'
)
class User(models.Model):
name = models.TextField(max_length=30, unique=True)
password = models.TextField(validators=[password_validator])
twitter_api_key = models.TextField(null=True, blank=True)
twitter_api_secret_key = models.TextField(null=True, blank=True)
twitter_access_token = models.TextField(null=True, blank=True)
twitter_access_token_secret = models.TextField(null=True, blank=True)
expire_date = models.DateField(default=date.today() + timedelta(days=14))
language = models.TextField(choices=LANGUAGE_CHOICES, default='1')
def schedule_date_validator(value):
if value < timezone.now() or timezone.now() + timedelta(days=14) < value:
raise ValidationError(
str('is not within the range (within 14 days from today)'),
code='invalid'
)
def content_validator(value):
if len(value) > 140:
raise ValidationError(
str('is too long (maximum 140 characters)'),
code='invalid'
)
class Tweet(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
content = models.TextField(validators=[content_validator])
schedule_date = models.DateTimeField(validators=[schedule_date_validator])
這是我發生錯誤的測試代碼:
def test_valid_tweet(self):
owner = User.objects.get(name="Hello")
tweet = Tweet(user=owner, content="Hello world!", schedule_date=timezone.now())
try:
tweet.full_clean() # error occurs here
pass
except ValidationError as e:
raise AssertionError("ValidationError should not been thrown")
tweet.save()
self.assertEqual(len(Tweet.objects.all()), 1)
當我在python manage.py shell
測試創建一個對象時,它會導致錯誤,但是如果我執行full_clean()
,它會導致錯誤。
問題在於代碼的邏輯。 我指定的時間范圍不允許schedule_date
和timezone.now()
相差一百萬分之一秒
看完DateTimeField
的源代碼后,似乎如果我的驗證器拋出code =“ invalid”,它將僅顯示以上錯誤消息,這使我對代碼錯誤之處感到困惑。
我用這個解決了這個問題
datetime.strptime(request.POST['date'], "%Y-%m-%dT%H:%M")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.