Невозможно преобразовать ключевое слово 'slug' в поле

Я делаю систему комментариев и ответов в моем блоге, используя Django. Сейчас я пытаюсь получить набор комментариев, которые не имеют ответных комментариев (если я не сделаю этого, ответные комментарии будут отображаться на странице как обычные комментарии). Вот ошибка, которую я получил:

FieldError at /post/fourh-news Невозможно преобразовать ключевое слово 'slug' в поле. Возможные варианты: comm_to_repl, comm_to_repl_id, comment_content, created, id, post, post_of_comment, post_of_comment_id, replies, user_created_comment, user_created_comment_id Метод запроса: GET URL запроса: http://127.0.0.1:8000/post/fourh-news. Версия Django: 4.1.2 Тип исключения: FieldError Значение исключения:
Невозможно преобразовать ключевое слово 'slug' в поле. Варианты: comm_to_repl, comm_to_repl_id, comment_content, created, id, post, post_of_comment, post_of_comment_id, replies, user_created_comment, user_created_comment_id Расположение исключения: D:\pythonProject28django_pet_project\venv\lib\site-packages\django\db\models\sql\query.py, line 1709, in names_to_path Возникает во время: blog.views.ShowSingleNews Версия Python: 3.10.4

Модель:

class Post(models.Model):
    title = models.CharField(max_length=150, verbose_name='Название')
    slug = models.CharField(max_length=100, unique=True, verbose_name='Url slug')
    content = models.TextField(verbose_name='Контент')
    created_at = models.DateTimeField(auto_now=True, verbose_name='Дата добавления')
    updated_at = models.DateTimeField(auto_now=True, verbose_name='Дата обновления')
    posted_by = models.CharField(max_length=100, verbose_name='Кем добавлено')
    photo = models.ImageField(upload_to='photos/%Y/%m/%d', verbose_name='Фото', blank=True)
    views = models.IntegerField(default=0)
    category = models.ForeignKey('Category', on_delete=models.PROTECT, verbose_name='Категория')
    tag = models.ManyToManyField('Tags', verbose_name='Тэг', blank=True)
    comment = models.ForeignKey('Comment', verbose_name='Комментарий', on_delete=models.CASCADE, null=True, blank=True)


    def __str__(self):
        return self.title

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

    class Meta:
        ordering = ['-created_at']

class Category(models.Model):
    title = models.CharField(max_length=150, verbose_name='Название')
    slug = models.CharField(max_length=100, unique=True, verbose_name='category_url_slug')


    def __str__(self):
        return self.title

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


    class Meta:
        ordering = ['title']

class Tags(models.Model):
    title = models.CharField(max_length=150, verbose_name='Название')
    slug = models.CharField(max_length=100, unique=True, verbose_name='tag_url_slug')

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

    def __str__(self):
        return self.title

    class Meta:
        ordering = ['title']

class Comment(models.Model):
    user_created_comment = models.ForeignKey(User, related_name='user', on_delete=models.CASCADE, null=True)
    post_of_comment = models.ForeignKey(Post, related_name='comments', on_delete=models.CASCADE, null=True)
    comment_content = models.TextField(verbose_name='Текст комментария')
    created = models.DateTimeField(auto_now=True)
    comm_to_repl = models.ForeignKey("self", on_delete=models.CASCADE, null=True, blank=True, related_name='replies')


    def get_absolute_url(self):
        return reverse('single_news', kwargs={'slug': self.post_of_comment.slug})

    class Meta:
        ordering = ['-created']

Вид:

class ShowSingleNews(DetailView):
    model = Post
    template_name = 'blog/single_news.html'
    context_object_name = 'post'
    raise_exception = True


    form = CommentForm

    def post(self, request, *args, **kwargs):
        form = CommentForm(request.POST)
        if form.is_valid():
            post = self.get_object()
            form.instance.user_created_comment = request.user
            form.instance.post_of_comment = post
            commrepl = request.POST.get("commentID")
            form.instance.comm_to_repl_id = int(commrepl)
            form.save()
        else:
            print("some error with form happened")
            print(form.errors.as_data())

        return redirect(reverse("single_news", kwargs={
            "slug": self.get_object().slug
        }))


    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['title'] = Post.objects.get(slug=self.kwargs['slug'])
        context['form'] = self.form
        self.object.views = F('views') + 1
        self.object.save()
        self.object.refresh_from_db()

        return context

    def get_queryset(self):
        return Comment.objects.filter(replies=None)

Шаблон:

Urls:

urlpatterns = [
    path('', HomePage.as_view(), name='home'),
    path('category/<str:slug>/', GetCategory.as_view(), name='category'),
    path('post/<str:slug>', ShowSingleNews.as_view(), name='single_news'),
    path('tag/<str:slug>', GetNewsByTag.as_view(), name='news_by_tag'),
    path('search/', Search.as_view(), name='search'),
    path('registration/', registration, name='registration'),
    path('login/', loginn, name='login'),
    path('logout/', logoutt, name='logout'),

Формы:

class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ['comment_content']

Нужно немного изменить передачу URL в HTML следующим образом...

<form method="POST" action="{% url 'single_news' post.slug %}">
    {% csrf_token %}
    <input type="hidden" id="commentID">
    <div class="comment">
        <input type="text" name="comment_content" placeholder="Comment" class="comment">
    </div>
    <div class="post">
        <input type="submit" value="Post">
    </div>
</form>

NOTE:- Если вы хотите передать url с ключом, вы можете сделать это следующим образом

<form method="POST" action="{% url 'single_news'?slug=post.slug %}">
    {% csrf_token %}
    <input type="hidden" id="commentID">
    <div class="comment">
        <input type="text" name="comment_content" placeholder="Comment" class="comment">
    </div>
    <div class="post">
        <input type="submit" value="Post">
    </div>
</form>
Вернуться на верх