Django ManyToMany relationship(Movie and Genre) - добавление объекта фильма к жанру
Я разрабатываю сайт потокового вещания. Когда вы загружаете фильм, он получает жанры, связанные с этим фильмом, из API.
Если жанров нет в таблице Genre, они добавляются в представлении UploadMovie. Когда эти жанры добавляются в таблицу, я добавляю фильм, для которого эти жанры предназначены, в последней строке кода ниже.
Приведен пример: Если я загружу фильм: Крепкий орешек 1, который имеет следующие жанры: Action, Thriller, эти жанры добавляются в БД, если они еще не существуют. Во время создания каждого жанра, Крепкий орешек добавляется в жанровое отношение с помощью: genre_to_save.movies.add(Movie.objects.last()) - это должно поместить фильм Крепкий орешек под жанры, экшн и триллер, и это действительно так. Однако когда я проверяю базу данных, я вижу, что "Крепкий орешек" также находится под каждым другим жанром, которым он НЕ является, например, под фантастикой и научной фантастикой. Крепкий орешек - это объект(34) фильма
Я уверен, что у меня есть какой-то недостаток в моей функции просмотра UploadMovie, но я не знаю где.
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')
Не обращайте внимания, я идиот, все работает, я просто неправильно интерпретировал данные, представленные в панели администратора...