Получаю сообщение "Integrity Error Exception Value: NOT NULL constraint failed" в моем приложении Django
Я продолжаю получать ошибку целостности для определенной таблицы в моей базе данных - таблицы рецензий, всякий раз, когда пользователь пытается просмотреть выбранный фильм. Я просмотрел свои коды строка за строкой, но не могу найти ошибку. Пожалуйста, помогите! Я всегда получаю "IntegrityError Exception Value:NOT NULL constraint failed: movieworld_review.review_number", когда пользователь пытается просмотреть фильм. Я даже пробовал установить для review_number значение null=True, но все равно появляется новое ограничение целостности, на этот раз "NOT NULL CONSTRAINT FAILED: MOVIEWORLD_REVIEW.MOVIE.ID".
НИЖЕ ПРИВЕДЕНЫ МОИ КОДЫ ДЛЯ ПРЕДСТАВЛЕНИЯ И МОДЕЛИ:
МОДЕЛИ:
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
picture = models.ImageField(upload_to = 'profile_images', blank=True)
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
SIZE = 250, 250
if self.picture:
pic = Image.open(self.picture.path)
pic.thumbnail(SIZE, Image.LANCZOS)
pic.save(self.picture.path)
def __str__(self):
return self.user.username
class Genre(models.Model):
title = models.CharField(max_length=30)
slug = models.SlugField(null=False, unique=True)
def get_absolute_url(self):
return reverse('genres', args=[self.slug])
def __str__(self):
return self.title
def save(self, *args, **kwargs):
if not self.slug:
self.title.replace(" ", "")
self.slug = slugify(self.title)
return super().save(*args, **kwargs)
class Movie(models.Model):
imdbID = models.CharField(max_length=20, blank=True)
Title = models.CharField(max_length=200)
Year = models.CharField(max_length=25, blank = True)
Genre = models.ManyToManyField(Genre, blank=True)
Language = models.CharField(max_length=250, blank=True)
Poster = models.ImageField(upload_to='movies', blank = True)
Poster_url = models.URLField(blank=True)
TotalSeasons = models.CharField(max_length=3, blank=True)
Plot = models.CharField(max_length=900, blank=True)
class Meta:
verbose_name_plural = 'Movies'
def __str__(self):
return self.title
def save(self, *args, **kwargs):
if self.Poster == '' and self.Poster_url !='':
value = requests.get(self.Poster_url)
pb = BytesIO()
pb.write(value.content)
pb.flush()
file_name = self.Poster_url.split("/")[-1]
self.Poster.save(file_name, files.File(pb), save=False)
return super().save(*args, **kwargs)
CHOICES = [ (1, '1 - Не рекомендую'), (2, '2 - Плохо'), (3, '3 - Рекомендую'), (4, '4 - Очень хорошо'), (5, '5 - шедевр'), ]
class Review(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
movie = models.ForeignKey(Movie, on_delete=models.CASCADE)
date = models.DateTimeField(auto_now_add=True)
review = models.TextField(max_length=3000, blank=True)
review_number = models.PositiveSmallIntegerField(choices=CHOICES)
def __str__(self):
return self.user.username
ПРОСМОТРОВ:
def review(request, imdb_id):
movie = Movie.objects.get(imdbID=imdb_id)
user = request.user
if request.method == 'POST':
form = RateForm(request.POST)
if form.is_valid():
rate = form.save(commit=False)
rate.user = user
rate.movie = movie
rate.save()
return HttpResponseRedirect(reverse('details', args=[imdb_id]))
else:
form = RateForm()
template = loader.get_template('movieworld/review.html')
context = {
'form': form,
'movie': movie,
}
return HttpResponse(template.render(context, request))
def movieDetails(request, imdb_id):
if Movie.objects.filter(imdbID=imdb_id).exists():
movie_data = Movie.objects.get(imdbID=imdb_id)
reviews = Review.objects.filter(movie=movie_data)
database = True
context = {
'movie_data': movie_data,
'reviews': reviews,
'database': database,
}
else:
url = 'http://www.omdbapi.com/?apikey=394a7f6d&i=' + imdb_id
response = requests.get(url)
movie_data = response.json()
genre_objs = []
genre_list = list(movie_data['Genre'].replace(" ", "").split(','))
for genre in genre_list:
genre_slug = slugify(genre)
g, created = Genre.objects.get_or_create(title=genre, slug=genre_slug)
genre_objs.append(g)
m, created = Movie.objects.get_or_create(
imdbID=movie_data['imdbID'],
Title=movie_data['Title'],
Year=movie_data['Year'],
Language=movie_data['Language'],
Poster_url=movie_data['Poster'],
Plot=movie_data['Plot'],
)
m.Genre.set(genre_objs)
m.save()
database = False
context = {
'movie_data': movie_data,
'database': database,
}
template = loader.get_template('movieworld/reviews.html')
return HttpResponse(template.render(context, request))