Как я могу заставить мою форму комментариев работать в django? - PullRequest
0 голосов
/ 08 октября 2019

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

models.py

class BlogPost(models.Model):
    # id = models.IntegerField()
    user = models.ForeignKey(User, default=1, null=True, on_delete=models.SET_NULL)
    image = models.ImageField(upload_to='image/', blank=True, null=True)
    title = models.CharField(max_length=120)
    slug = models.SlugField(unique=True)
    content = models.TextField(null=True, blank=True)
    publish_date = models.DateTimeField(auto_now=False, auto_now_add=False, null=True, blank=True)
    timestamp = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    objects = BlogPostManager()

    class Meta:
        ordering = ['-publish_date', '-updated', '-timestamp']

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return f"/blog/{self.slug}"

    def get_edit_url(self):
        return f"{self.get_absolute_url()}/edit"

    def get_delete_url(self):
        return f"{self.get_absolute_url()}/delete"


class Comment(models.Model):
    comment_cont = models.TextField(max_length=200, verbose_name='Comment content')
    user_name = models.ForeignKey(User, default=1, null=True, on_delete=models.SET_NULL)
    comment_post = models.ForeignKey(BlogPost, on_delete=models.CASCADE, related_name='comments')
    comment_date = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.comment_cont

    def get_absolute_url(self):
        return f"{BlogPost.get_absolute_url()}"

    def get_add_url(self):
        return f"{self.get_absolute_url()}/addc"

views.py

def add_comment_to_post(request, slug):
    post = get_object_or_404(BlogPost, slug=slug)
    if request.method == "POST":
        form = CommentForm(request.POST)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.post = post
            comment.save()
            return redirect('blog_post_detail_view', slug=post.slug)
    else:
        form = CommentForm()
    template_name = 'formc.html'
    context = {"title": f"New comment on {post.title}", "form": form}
    return render(request, template_name, context)

urls.py

path('<str:slug>/addc', add_comment_to_post),

formc.html

<form method='POST' action='.' enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Comment</button>
</form>

кнопка в home.html

<a class="btn btn-primary" href="{{ comments.get_add_url }}">Add Comment...</a>

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

1 Ответ

0 голосов
/ 17 октября 2019

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

Пожалуйста, дайте мне знать, если есть лучший способ, которым я мог бы сделать это. Спасибо !!

home.html

<a class="btn btn-primary" href="/{{blog_post.slug}}/addc/">Add Comment...</a>
...