Slug превращается в число при переходе к следующему шагу в django

Я пытался искать эту проблему здесь, но ничего не нашел, надеюсь, кто-нибудь сможет помочь с ответом или отправить ссылку на решение на stackoverflow...

Я создал блог, и когда я нажимаю на название поста, он переходит на 'post_details.html' и в URL показывает slug с названием поста. Как здесь:

examplename.com/blog/brooklyn-nets-at-miami-heat-preview/

Но когда я нажимаю написать комментарий к посту, он переводит меня на страницу с формой, но заголовок slug исчезает, он просто показывает номер поста. Например, так:

examplename.com/blog/3/add-comment

Может ли кто-нибудь объяснить, почему это происходит? Я хочу знать, как это решить и понять, откуда берется это число, которое появляется.

Post_detail.html

{% block content %}
<h2 class="title">
    <a class="post-title" href="{{ post.get_absolute_url }}">
        {{ post.title }}
    </a>
</h2>
<p class="date">
    Publicado em {{ post.created }} por {{ post.author }}
</p>
{{ post.body|linebreaks }}
<hr>
<h3>Comments</h3>
{% if not post.comments.all %}
    Nobody commented yet...<a href="{% url 'blog:commentview' post.pk %}">Add a comment</a>
{% else %}
    <a href="{% url 'blog:commentview' post.pk %}">Add a comment</a>
    {% for comment in post.comments.all %}
        {{ comment.name }}
        {{ comment.date }}
        <br>
        {{ comment.body }}
    {% endfor %}
{% endif %}
    <a class="swen" href="{% url 'blog:list' %}">More Articles</a>
{% endblock %}

urls.py

from unicodedata import name
from django.urls import path
from . import views
app_name = 'blog'
urlpatterns = [
path("", views.PostListView.as_view(), name="list"),
path("<slug:slug>/", views.PostDetailView.as_view(), name="detail"),
path("<slug:slug>/add-comment", views.CommentView.as_view(), name="commentview")
]

models.py

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

class Post(models.Model):
    title = models.CharField(max_length=255)
    slug = models.SlugField(max_length=255, unique=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    body = models.TextField()
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

def __str__(self):
    return self.title

def get_absolute_url(self):
    return reverse ('blog:detail', kwargs={"slug":self.slug})

class Meta:
    ordering = ("-created",)

class Comment(models.Model):
    post = models.ForeignKey(Post, related_name="comments", on_delete=models.CASCADE)
    name = models.CharField(max_length=255)
    body = models.TextField()
    date = models.DateField(auto_now_add=True)
    slug = Post.slug

def __str__(self):
    return reverse (self.post.title, self.name, self.post.slug)

views.py

from xml.etree.ElementTree import Comment
from django.views.generic import DetailView, ListView, CreateView
from .models import Post, Comment

class PostListView(ListView):
    model = Post 

class PostDetailView(DetailView):
    model = Post

class CommentView(CreateView):
    model = Comment
    template_name = 'add_comment.html'
    fields = '__all__'

Вы передаете в качестве параметра pk, который является типом integer, вместо slug в имени пути commentview. Возможно, вам следует проверить это.

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