ModuleNotFoundError в /blog/post/comment/update/18/ Нет модуля с именем ‘test-post-ecomon’

#python #django #forms

#python #django #формы

Вопрос:

У меня есть раздел блога на моем веб-сайте, и я сделал CommentUpdateView, и после отправки формы он выдает мне эту ошибку

 ModuleNotFoundError at /blog/post/comment/update/18/
No module named 'test-post-ecomon'
 

но я не понимаю, почему, потому что этот пост существует, и я реализовал get_absolute_url в моих моделях контактов, и он должен работать правильно? Когда я создаю новое сообщение, оно работает.

Вид

 class CommentUpdateView(LoginRequiredMixin, UpdateView):
    model = Comment
    form_class = CommentUpdateForm
    template_name = 'blog/update_comment.html'

    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)

    def get_queryset(self, *args, **kwargs):
        return super().get_queryset(*args, **kwargs).filter(author=self.request.user)
 

Модель

 class Comment(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
    reply = models.ForeignKey('self', on_delete=models.CASCADE, null=True, related_name='replies')
    content = models.TextField(_('Content'))
    posted_date = models.DateTimeField(_('Posted Date/Time'), auto_now_add=True)
    updated_date = models.DateTimeField(_('Updated Date/Time'), auto_now=True)

    def __str__(self):
        return f'{self.author.username} - {self.post.title}'

    def get_absolute_url(self):
        return reverse('post', self.post.slug)
 

url-адреса

 path('post/<slug:slug>/', PostDetailView.as_view(), name='post'),
path('post/comment/update/<int:pk>/', CommentUpdateView.as_view(), name='update-comment'),
 

Ответ №1:

Попробуйте переписать свой get_absolute_url , как это:

 def get_absolute_url(request):
    return reverse('post', args=(self.post.slug, ))
 

PS Вы действительно не хотите переназначать пользователя в своем представлении обновления, поскольку это снижает производительность, в то время как вы практически ничего не делаете