OReverseMatch at /reviews/ Reverse for 'reviews_detail' with arguments
У вас есть серьезные проблемы со следующим.
В моем проекте есть приложение отзывов, где люди могут читать, оставлять, редактировать и удалять отзывы. Все работало нормально в gitpod на локальной стороне, но затем, когда я переместил приложение на Heroku, я начал получать ошибки. На Heroku я получал ошибку null constraint, а на локальной стороне я получал ошибку "null value in column". Я очистил базу данных, удалил пользователей и создал нового суперпользователя после обновления моделей для использования uuid. Теперь я получаю обратную ошибку на локальной стороне (одному богу известно, что произойдет, когда я переведу ее на Heroku, но давайте разберемся с одной вещью за раз).
В любом случае, я прикреплю весь соответствующий код ниже. У меня завтра должен быть проект, так что любая помощь будет очень признательна.
reviews.html
{% extends "base.html" %}
{% load static %}
{% block content %}
<div class="container-fluid text-white">
<div class="row mt-5">
{% for review in object_list %}
<div class="col col-md-3 reviews">
<h1 class="pt-3">Title: {{ review.title }}</h1>
{% if request.user.is_authenticated %}
{% if user.id == review.user.id %}
<a href="{% url 'update_review' review.pk %}">Edit</a>
<a href="{% url 'delete_review' review.pk %}">Delete</a><br>
{% endif %}
{% endif %}
<a href="{% url 'reviews_detail' review.pk %}">{{ review.review|slice:":50" }}</a><br>
{{ review.user }}<br>
{{ review.rate }} Stars<br>
{{ review.created_at }}
</div>
{% endfor %}
</div>
<div class="row">
<div class="col">
<a href="{% url 'add_review' %}">
<h1 class="headings">Leave a Review</h1>
</a>
</div>
</div>
</div>
{% endblock %}
models.py
import uuid
from django.db import models
from django.contrib.auth.models import User
RATINGS = (
(1, '1'),
(2, '2'),
(3, '3'),
(4, '4'),
(5, '5'),
)
class UserReviews(models.Model):
""" model for user reviews used to create and view reviews """
title = models.CharField(max_length=50, blank=True)
review = models.TextField(max_length=1000)
user = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
rate = models.IntegerField(choices=RATINGS, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
urls.py
from django.urls import path
from .views import ReviewListView, ReviewDetailView, ReviewFormView, UpdateReviewView, DeleteReviewView
urlpatterns = [
path('add_review/', ReviewFormView.as_view(), name='add_review'),
path('', ReviewListView.as_view(), name='reviews'),
path('reviews/<int:pk>', ReviewDetailView.as_view(),
name='reviews_detail'),
path('review/update/<int:pk>', UpdateReviewView.as_view(), name='update_review'),
path('review/<int:pk>/delete/', DeleteReviewView.as_view(), name='delete_review'),
]
views.py
""" imports from django, models.py and forms.py """
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
from django.urls import reverse_lazy
from .models import UserReviews
from .forms import UserReviewForm
class ReviewListView(ListView):
""" view for generating the review list """
model = UserReviews
template_name = "reviews/reviews.html"
ordering = ['-created_at']
class ReviewDetailView(DetailView):
""" view for generation Review Details """
model = UserReviews
template_name = "reviews/reviews_detail.html"
class ReviewFormView(CreateView):
""" view for review form """
model = UserReviews
template_name = "reviews/add_review.html"
form_class = UserReviewForm
success_url = reverse_lazy('reviews')
class UpdateReviewView(UpdateView):
""" view for updating review form """
model = UserReviews
template_name = "reviews/update_review.html"
form_class = UserReviewForm
class DeleteReviewView(DeleteView):
""" view for deleting review form """
model = UserReviews
template_name = "reviews/delete_review.html"
success_url = reverse_lazy('reviews')
forms.py
from django import forms
from .models import UserReviews
class UserReviewForm(forms.ModelForm):
""" meta data to generate contact us form """
class Meta:
""" form model, fields and widgets used"""
model = UserReviews
fields = [
'title', 'review', 'rate'
]
def form_valid(self, form):
# if form is valid return to discussion
form.instance.user = self.request.user
return super().form_valid(form)