Django ManyToMany relationship(Movie and Genre) - добавление объекта фильма к жанру

Я разрабатываю сайт потокового вещания. Когда вы загружаете фильм, он получает жанры, связанные с этим фильмом, из API.

Если жанров нет в таблице Genre, они добавляются в представлении UploadMovie. Когда эти жанры добавляются в таблицу, я добавляю фильм, для которого эти жанры предназначены, в последней строке кода ниже.

Приведен пример: Если я загружу фильм: Крепкий орешек 1, который имеет следующие жанры: Action, Thriller, эти жанры добавляются в БД, если они еще не существуют. Во время создания каждого жанра, Крепкий орешек добавляется в жанровое отношение с помощью: genre_to_save.movies.add(Movie.objects.last()) - это должно поместить фильм Крепкий орешек под жанры, экшн и триллер, и это действительно так. Однако когда я проверяю базу данных, я вижу, что "Крепкий орешек" также находится под каждым другим жанром, которым он НЕ является, например, под фантастикой и научной фантастикой. Крепкий орешек - это объект(34) фильма

Я уверен, что у меня есть какой-то недостаток в моей функции просмотра UploadMovie, но я не знаю где.

Заранее спасибо. enter image description here

enter image description here

class UploadMovie(View):
    def get(self, request, *args, **kwargs):
        if not request.user.is_authenticated:
            return redirect('/accounts/login')
        else:
            return render(request, 'core/video_upload.html')

    def post(self,request,*args,**kwargs):
        form = MovieForm(request.POST, request.FILES or None)
        
        duplicate_movie = False
        
        print(form.is_valid())
        if form.is_valid():
            print(form.cleaned_data)
            title = form.cleaned_data['title']
            file = form.cleaned_data['file']
            
            movie_id = get_movie_id(title)
            description,backdrop_path,original_title,release_date,runtime,vote_average,tagline,genres = get_movie_details(movie_id)
            
            movie = Movie()
            movie.title = title
            movie.file = file
            movie.description = description
            movie.original_title = original_title
            movie.release_date = release_date
            movie.runtime = runtime
            movie.vote_average = vote_average
            movie.backdrop_path = "https://image.tmdb.org/t/p/original" + backdrop_path
            movie.tagline = tagline
            
            movies = Movie.objects.all()
            db_genres = Genre.objects.all()      
            
            for mov in movies:
                if mov.original_title == movie.original_title:
                    duplicate_movie == True
                    return redirect('core:profiles')

            if not duplicate_movie:
                movie.save()
            
            print(original_title)
            movie = Movie.objects.last()

            print("Current movie is: " + str(movie.original_title))
            print("Current movie obj is: " + str(movie))

            print("Genres are the following: " + str(genres))
            
            for genre in genres:
                if genre not in db_genres:
                    print("Adding genre: " + genre + " to DB!")
                    genre_to_save = Genre()
                    genre_to_save.genre = genre
                    genre_to_save.save()
                    print("Adding " + str(movie.original_title) + " to genre: " + str(genre_to_save.genre))
                    genre_to_save = Genre.objects.last()
                    genre_to_save.movies.add(Movie.objects.last())
                    
            return redirect('core:profiles')

Не обращайте внимания, я идиот, все работает, я просто неправильно интерпретировал данные, представленные в панели администратора...

Вернуться на верх