Как создать сайт с рейтингом фильмов на Django, используя TMDB API?
Я хочу создать сайт кинообзоров, используя API TMDB, и у меня есть вопрос.
1.Я получаю ошибку "Movie matching query does not exist.
".Я думаю, что я определил модель Movie и movie = Movie.objects.get(id=movie_id) - это неправильно.
- Я хочу вывести список комментариев и фильмов, прокомментированных пользователем, в файле views.py. Как мне это добавить?
3.Пользователь может комментировать только один фильм, но я хочу добавить редактирование и удаление, как я могу это сделать?
def view_tv_detail(request, tv_id):
if request.method == "POST":
user = request.user
comment = request.POST.get("comment")
stars = request.POST.get("stars")
if not request.user.is_authenticated:
user = User.objects.get(id=1)
Comment(comment=comment, star = stars, user=user,movie_id = tv_id).save()
return redirect(f"/tv/{tv_id}/")
else:
data = requests.get(f"https://api.themoviedb.org/3/tv/{tv_id}?api_key={TMDB_API_KEY}&language=en-US")
recommendations = requests.get(f"https://api.themoviedb.org/3/tv/{tv_id}/recommendations?api_key={TMDB_API_KEY}&language=en-US")
comment_list = Comment.objects.filter(movie_id=tv_id)
comments = reversed(Comment.objects.filter(movie_id=tv_id))
n_comments = comments.count()
if n_comments == 0:
average = 0
else:
average = sum([comment.stars for comment in comments]) / n_comments
return render(request, "Movie/tv_detail.html", {
"data": data.json(),
"recommendations": recommendations.json(),
"type": "tv",
"comments": comments,
"average" : average,
})
class Movie(models.Model):
def get_comments(self):
return Comment.objects.filter(movie_id=self.id)
def average_stars(self):
comments = self.get_comments()
n_comments = comments.count()
if n_comments:
return sum([comment.stars for comment in comments]) / n_comments
else:
return 'No comments posted yet'
class Comment(models.Model):
class Meta:
unique_together = ('user', 'movie',)
comment = models.TextField(max_length=1000)
stars = models.FloatField(
blank=False,
null=False,
default=0,
validators=[MinValueValidator(0.0),
MaxValueValidator(10.0)]
)
user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
movie = models.ForeignKey(Movie, on_delete=models.CASCADE)
created_at = models.DateTimeField(default=datetime.now)
updated_at = models.DateTimeField(auto_now=True)