Миграция django приводит к ошибке формата даты
Пытаюсь выполнить миграцию, используя следующее
models.py
from django.db import models
from django.utils.text import slugify
from django.utils import timezone
# Create your models here.
CATEGORY_CHOICES = (
('action','ACTION'),
('drama','DRAMA'),
('comedy','COMEDY'),
('romance','ROMANCE'),
)
LANGUAGE_CHOICES = (
('english' , 'ENGLISH'),
('german' , 'GERMAN'),
)
STATUS_CHOICES = (
('RA' , 'RECRNTLY ADDED'),
('MW' , 'MOST WATCHED'),
('TR' , 'TOP RATED'),
)
class Movie(models.Model):
title = models.CharField(max_length=100)
description = models.TextField(max_length=1000)
image = models.ImageField(upload_to='movies')
banner = models.ImageField(upload_to='movies_banner')
category = models.CharField(choices=CATEGORY_CHOICES , max_length=10)
language = models.CharField(choices=LANGUAGE_CHOICES , max_length=10)
status = models.CharField(choices=STATUS_CHOICES , max_length=2)
cast = models.CharField(max_length=100)
year_of_production = models.DateField()
views_count = models.IntegerField(default=0)
movie_trailer = models.URLField()
created = models.DateTimeField(default=timezone.now)
slug = models.SlugField(blank=True, null=True)
def save(self , *args , **kwargs):
if not self.slug :
self.slug = slugify(self.title)
super(Movie , self).save( *args , **kwargs)
def __str__(self):
return self.title
LINK_CHOICES = (
('D' , 'DOWNLOAD LINK'),
('W' , 'WATCH LINK'),
)
class MovieLinks(models.Model):
movie = models.ForeignKey(Movie, related_name='movie_watch_link', on_delete=models.CASCADE)
type = models.CharField(choices=LINK_CHOICES , max_length=1)
link = models.URLField()
def __str__(self):
return str(self.movie)
views.py
from django.shortcuts import render
from django.views.generic import ListView, DetailView
from django.views.generic.dates import YearArchiveView
from .models import Movie, MovieLinks
# Create your views here.
class HomeView(ListView):
model = Movie
template_name = 'movie/home.html'
def get_context_data(self, **kwargs):
context = super(HomeView, self).get_context_data(**kwargs)
context['top_rated'] = Movie.objects.filter(status='TR')
context['most_watched'] = Movie.objects.filter(status='MW')
context['recently_added'] = Movie.objects.filter(status='RA')
return context
class MovieList(ListView):
model = Movie
paginate_by = 2
class MovieDetail(DetailView):
model = Movie
def get_object(self):
object = super(MovieDetail, self).get_object()
object.views_count += 1
object.save()
return object
def get_context_data(self, **kwargs):
context = super(MovieDetail, self).get_context_data(**kwargs)
context['links'] = MovieLinks.objects.filter(movie=self.get_object())
context['related_movies'] = Movie.objects.filter(category=self.get_object().category)
print(context)
return context
class MovieCategory(ListView):
model = Movie
paginate_by = 2
def get_queryset(self):
self.category = self.kwargs['category']
return Movie.objects.filter(category=self.category)
def get_context_data(self, **kwargs):
context = super(MovieCategory, self).get_context_data(**kwargs)
context['movie_category'] = self.category
return context
class MovieLanguage(ListView):
model = Movie
paginate_by = 2
def get_queryset(self):
self.laungage = self.kwargs['lang']
return Movie.objects.filter(category=self.language)
def get_context_data(self, **kwargs):
context = super(MovieLanguage, self).get_context_data(**kwargs)
context['movie_language'] = self.language
return context
class MovieSearch(ListView):
model = Movie
paginate_by = 2
def get_queryset(self):
query = self.request.GET.get('query')
if query:
object_list = self.model.objects.filter(title__icontains=query)
else:
object_list = self.model.objects.none()
return object_list
class MovieYear(YearArchiveView):
queryset = Movie.objects.all()
date_field = 'year_of_production'
make_object_list = True
allow_future = True
Выход :
django.core.exceptions.ValidationError: ['“” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format.']
Полный выход :
Нашли решения здесь
Все, что было в разделе миграций, должно быть удалено и
created = models.DateTimeField(default=timezone.now)
нужно было установить значение blank=True
Просто измените созданное поле на timezone.now неправильно, замените его на timezone.now()
created = models.DateTimeField(default=timezone.now())
и после
python manage.py makemigrations
python manage.py migrate