繁体   English   中英

评论一篇博文 django

[英]comment on a blog post django

我正在尝试使用 slug 而不是 pk 在博客网站上创建评论系统,我遇到非 NULL 约束失败:home_comment.post_id 错误

我的错误出现在基于类的视图中的 form_valid 函数中

form.instance.post_id = self.kwargs['pk']

我该怎么做 ^ 用蛞蝓

form.instance.post__slug = self.kwargs['slug'] (这显示错误)

视图.py

class AddCommentView(CreateView):
    model = Comment
    form_class = AddCommentForm
    template_name = "add_comment.html"

    def form_valid(self, form):
        form.instance.post__slug = self.kwargs["slug"]
        form.instance.name = self.request.user
        return super().form_valid(form)

模型.py

class Post(models.Model):
    title = models.CharField(max_length=1000, default="Title")
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    category = models.CharField(max_length=1000, default="Category")
    body = models.TextField(default="This is the Body of the Post.")
    slug = models.SlugField(max_length=1000, null=True, blank=True)
    created_time = models.DateTimeField(auto_now_add=True)
    created_date = models.DateField(auto_now_add=True)
    updated_time = models.DateTimeField(auto_now=True)
    updated_date = models.DateField(auto_now=True)
    likes = models.ManyToManyField(User, related_name="blog_posts_likes")
    dislikes = models.ManyToManyField(User, related_name="blog_posts_dislikes")

    class Meta:
        verbose_name_plural = "Blogs & Posts"

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        self.slug = generate_slug(self.title)
        super(Post, self).save(*args, **kwargs)

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

class Comment(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name="comments")
    name = models.ForeignKey(User, on_delete=models.CASCADE)
    body = models.TextField()
    date_added = models.DateField(auto_now_add=True)
    time_added = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name_plural = "Post Comments"

    def __str__(self):
        return "%s - %s" % (self.post.title, self.name.username)

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

.html 文件

{% extends "base.html" %}

{% block content %}

{% if user.is_authenticated %}

<section class="text-gray-600 body-font relative">
    <div class="container px-5 py-24 mx-auto">
        <div class="flex flex-col text-center w-full mb-12">
            <h1 class="sm:text-3xl text-2xl font-medium title-font mb-4 text-gray-900">Add A Comment</h1>
        </div>
        <div class="mx-auto">
            <form method="post">
                {% csrf_token %}
                {{form}}
                <div class="p-2 w-full">
                    <button
                        class="flex mx-auto text-white bg-indigo-500 border-0 py-2 px-8 focus:outline-none hover:bg-indigo-600 rounded text-lg">Add</button>

                </div>
                <div class="p-2 w-full pt-8 mt-8 border-t border-gray-200 text-center">
                </div>
            </form>
        </div>
    </div>
</section>


{% endif %}

{% endblock %}

尝试这个

  def form_valid(self, form):
        form.instance.post = Post.objects.get(slug=self.kwargs["slug"])
        form.instance.name = self.request.user
        return super().form_valid(form)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM