Получаю сообщение "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))
Вернуться на верх