Django-установка только одной рецензии на пользователя и фильм

models.py

from django.db import models
from django.contrib.auth.models import User

class Play(models.Model):
title = models.CharField(max_length=150)
plot = models.TextField(max_length=900)
slug = models.SlugField(unique=True, null=True)
cast = models.CharField(max_length=500, default=0)
category = models.CharField(choices=CATEGORY_CHOICE, max_length=10)
image = models.ImageField(upload_to='movie')
year = models.DateTimeField()
author = models.ForeignKey(User, default=None, on_delete=models.CASCADE)

    def __str__(self):
    return self.title

class Review(models.Model):
user = models.ForeignKey(User, default=None, on_delete=models.CASCADE)
movie = models.ForeignKey(Play, blank=True, null=True, on_delete=models.CASCADE)
text = models.TextField()

likes = models.ManyToManyField(User, related_name='blog_comment')
   def count_likes(self):
    return self.likes.count()

def __str__(self):
    return f"{self.movie.title} 'User:' {self.user}"

views.py

from django.shortcuts import render, redirect, reverse
from .models import Play, Review
from django.contrib.auth.decorators import login_required
from . import forms
from django.http import HttpResponseRedirect

def movies_list(request):
article = Play.objects.all().order_by('year')
return render(request, "articles/movies_list.html", {"articles":article})

def movies_detail(request, slug):
articles = Play.objects.get(slug=slug)
all_reviews = Review.objects.all().order_by('movie')
isReviewAllowed = check_user_review(request, slug)
    return render(request, "articles/movies_detail.html", {"articles":articles,'all_reviews': all_reviews, 'isReviewAllowed': isReviewAllowed})

@login_required(login_url="/accounts/login/")
def article_create(request):
if request.method == "POST":
    form = forms.CreatePlay(request.POST, request.FILES)
    if form.is_valid():
instance = form.save(commit=False)
        instance.author = request.user
        instance.save()
        return redirect("movies:home")
 else:
        form = forms.CreatePlay()
return render(request, "articles/article_create.html", {"form":form})

@login_required(login_url="/accounts/login/")
def sub_review(request, slug):
form = forms.CreateReview(request.POST)
if form.is_valid():
    instance = form.save(commit=False)
    instance.user = request.user
    show = Play.objects.get(slug=slug)
instance.movie = show
    instance.save()
    return redirect("movies:detail", slug=slug)
else:
    form = forms.CreateReview()
    return render(request, "articles/review.html", {"form":form, "slug":slug})

def check_user_review(request, slug):
check = Review.objects.values_list('user', 'movie')
test = Review.objects.count()
watch = Play.objects.get(slug=slug)
if test == 0:
    return True
    else:
  for user, movie in check:
          if user == request.user.id and movie == watch.id:
          return False
      else:
          return True

def like_view(request, slug):
like = Review.objects.get(id=request.POST.get('review_id'))
like.likes.add(request.user)
return HttpResponseRedirect(reverse('movies:detail', args=[slug]))

movies_detail.html

{% extends 'base.html' %}
{% block content %}

<img src="{{ articles.image.url }}" width="200px" height="300" style="display: inline-block;" >
<div id="movie_plot">
  <h2>{{articles.title}}</h2>
  <p>{{articles.plot}}</p>
{{articles.category}}
 <p>{{articles.cast}}</p>
 <p>{{articles.year}}</p>

</div>
{% if isReviewAllowed == True %}
<div class="isReviewAllowed">
        <div class="nav_button"><a class="new_movie" href="{% url 'movies:review' slug=articles.slug %}">Create Review</a></div>
</div>
{% endif %}
{% for review in all_reviews %}
{% if review.Review == movie.title %}
<div class="all_reviews">
        <div class="review">
<p><span style="font-weight: normal;">Reviewed by: </span> {{review.user}} </p>
            <p><span style="font-weight: normal;">Description: </span>{{review.text}}</p>
<form style="text-align: center;" action="{% url 'movies:like' slug=articles.slug %}" method="post">
            {% csrf_token %}
                <button style="color: white; background: #104e89;" type="submit", name="review_id", value="{{ review.id }}", class="btn btn-primary btn-sm">Like</button> {{review.count_likes}}
</form>
        </div>
{% elif review.movie.title == movie.title %}
<div class="review">
        <p><span style="font-weight: normal;">Reviewed by: </span> {{review.user}} </p>
        <p><span style="font-weight: normal;">Description: </span>{{review.text}}</p>
        </div>
     {% endif %}
{% endfor %}
</div>
{% endblock %}

hi, что я хочу сделать, это создать только одну рецензию на фильм и на пользователя, например: имя_пользователя создать рецензию для человека-паука и еще у меня проблема в том, что если я создаю рецензию на определенный фильм, она также появляется в другом фильме. Я хочу, чтобы он показывал конкретную рецензию на конкретный фильм. спасибо

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