Как сделать чтобы отзыв можно было оставить только один раз? django

Есть страница на которой можно оставить отзыв но сейчас это можно делать неограниченое количество раз, я хочу чтобы при написании отзыва бралось ip пользователя и потом с этого же ip было нельзя отправлять еще отзывы. Я пытался сделать отдельный класс для этого но что то не получсается.

views.py

class Reviews(CreateView):
    form_class = ReviewsForm
    rm = ReviewsModel.objects.all()
    extra_context = {'title': 'Відгуки', 'Reviews': rm}
    template_name = 'main_hd/reviews.html'
    success_url = reverse_lazy('reviews')
    

def get_client_ip(request):
    x_forward_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forward_for:
        ip = x_forward_for.split(',')[0]
        print(x_forward_for.split(','))
    else:
        ip = request.META.get('REMOTE_ADDR')
    return ip

class AddReview(View):
    def get(self, request):
        ip_client = get_client_ip(request)
        try:
            ReviewsModel.objects.get(ip=ip_client)
            return redirect('reviews')
        except:
            new_review = ReviewsModel()
            new_review.ip = ip_client
            new_review.save()
            return redirect('reviews')

models.py (представление отзывов):

class ReviewsModel(models.Model):
    name = models.CharField("Ім'я", max_length=200)
    email = models.CharField("E-Mail", max_length=200)
    review_text = models.CharField('Відгук', max_length=1000)
    ip = models.CharField('IP-адреса', max_length=100)

    def __str__(self):
        return self.name
    
    class Meta:
        verbose_name = 'Отзыв'
        verbose_name_plural = 'Отзывы'

urls.py:

urlpatterns = [
    path('', views.HomePage, name='home'),
    path('sing_up', views.SingUp, name='singup'),
    path('reviews', views.Reviews.as_view(), name='reviews'),
    path('reviews/add_review/', views.AddReview.as_view(), name='add_review'),
    path('ourservices', views.OurServices, name='ourservices'),
    path('ourservices/<int:category_id>', views.OurServicesDetail.as_view(), name='OurServicesDetail'),
]

Буду благодарен любой помощи.

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