Пытается заставить работать 'get absolute url' (Python - Django) - PullRequest
0 голосов
/ 19 апреля 2020

Как только пользователь зашел на мой сайт, он мог написать сообщение и обновить его.

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

Теперь, когда я пытаюсь обновить сообщения, я получаю сообщение об ошибке.

Я предполагаю, что это потому, что есть внешний ключ, связывающий класс комментариев с классом записей. Я попытался найти проблему в Google и посмотреть на StackOverflow, но не был полностью убежден, что материал, который я читал, был отдаленно связан с моей проблемой. Я изо всех сил пытаюсь решить проблему, потому что я даже не понимаю / знаю, в чем проблема.

enter image description here

models.py

def save(self, *args, **kwargs):
        self.url= slugify(self.title)
        super().save(*args, **kwargs)

    def __str__(self):
        return self.title 

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


class Comment(models.Model):
    post = models.ForeignKey(Post,on_delete=models.CASCADE,related_name='comments')
    name = models.CharField(max_length=80)
    email = models.EmailField()
    body = models.TextField()
    created_on = models.DateTimeField(auto_now_add=True)
    active = models.BooleanField(default=False)

    class Meta:
        ordering = ['created_on']

    def __str__(self):
        return 'Comment {} by {}'.format(self.body, self.name)

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

views.py

def post_detail(request, pk):
template_name = 'post_detail.html'

comments = Comment.objects.filter(post=pk ,active=True)
post = Post.objects.get(pk=pk)
new_comment = None
# Comment posted
if request.method == 'POST':
    comment_form = CommentForm(data=request.POST)
    if comment_form.is_valid():

        # Create Comment object but don't save to database yet
        new_comment = comment_form.save(commit=False)
        # Assign the current post to the comment
        new_comment.post = post
        # Save the comment to the database
        new_comment.save()
else:
    comment_form = CommentForm()

return render(request, template_name, {'post': post,
                                       'comments': comments,
                                       'new_comment': new_comment,
                                       'comment_form': comment_form})

1 Ответ

3 голосов
/ 19 апреля 2020

В вашей модели нет поля Comment, называемого слагом (он же SlugField), поэтому оно не будет работать. Метод save также должен быть определен в классе - см. здесь . Вам также не нужно get_absolute_url под save().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...