Я получаю следующую ошибку, когда пытаюсь проверить, допустим ли мой объект, используя 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."]}
Я перепробовал все рекомендуемые здесь форматы, но ни один из них мне не подходит:
Какой правильный формат для django dateTime?
Я не получу ошибку при создании объекта, подобного 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()
, это вызовет ошибку.