繁体   English   中英

在 Django 中添加过滤器注释

[英]Add filter Comment in Django

我在添加评论时遇到问题,只添加空格或输入。 不知道怎么过滤。 如果用户发送一个普通评论,它会被转移到当前页面,但如果只发送空格或输入,它会被转移到 URL 评论。

这是我的代码:models.py

class Post(models.Model):
    """Post Model"""
    hash = models.UUIDField(default=uuid.uuid4, editable=False)
    title = models.CharField("Title", max_length=200)
    slug = models.SlugField(max_length=200, unique=True)
    author  = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        related_name="created_by",
        on_delete=models.CASCADE,
        default=current_user.CurrentUserMiddleware.get_current_user,
    )
    category = TreeForeignKey(Category, verbose_name="Category", related_name="items", on_delete=models.CASCADE)
    tags = TaggableManager()
    image = models.ImageField("Image", upload_to=get_timestamp_path)
    content = RichTextUploadingField()
    create_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.title}"

    def get_absolute_url(self):
        return reverse("main:post_detail", args=[self.slug])

    def save(self, *args, **kwargs):
        if str(self.hash) not in self.slug:
            self.slug = f"{self.slug}-{self.hash}" 
            super().save(*args, **kwargs)

    def get_comment(self):
        return self.comment_set.all()


class Comment(models.Model):
    user = models.ForeignKey(User, verbose_name="User", on_delete=models.CASCADE)
    post = models.ForeignKey(Post, verbose_name="Post", on_delete=models.CASCADE)
    text = models.TextField(verbose_name="Comment")
    create_at = models.DateTimeField("Date of creating", auto_now=True)

    class Meta:
        verbose_name = "Comment"
        verbose_name_plural = "Comments"

    def __str__(self):
        return str(self.user)

视图.py

class PostDetail(DetailView, MultipleObjectMixin):
    model = Post
    context_object_name = 'post'
    paginate_by = 10
    template_name = 'main/post_detail.html'

    def get_context_data(self, **kwargs):
        comments = Comment.objects.filter(post=self.get_object())
        context = super(PostDetail, self).get_context_data(object_list=comments, **kwargs)
        return context

class AddComment(LoginRequiredMixin, CreateView):
    """Add Comment"""
    model = Post
    form_class = CommentForm

    def form_valid(self, form):

        form.instance.user = self.request.user
        form.instance.post_id = self.kwargs.get('pk')
        self.success_url = form.instance.post.get_absolute_url()
        form.save()
        return super(AddComment, self).form_valid(form)

网址.py

path('comment/<int:pk>/', AddComment.as_view(), name="add_comment"),

forms.py

class CommentForm(forms.ModelForm):
    """Post Form"""
    class Meta:
        model = Comment
        fields = ["text"]

post_detail.html

<form id="formComment" method="post" action="{% url 'main:add_comment' post.id %}">
    {% csrf_token %}
    <div class="row">
    <div class="col form-group">
        <textarea name="text" class="form-control" placeholder="Your Comment*" required></textarea>
    </div>
    </div>
    <button type="submit" class="btn btn-primary">Post Comment</button>

</form>

如果我发送带有输入空格的评论,则会收到此错误

TemplateDoesNotExist at /comment/1/
main/post_form.html

您尚未在 AddComment 视图中定义模板名称。

由于您使用 CreateView 添加评论,因此您应该使用单独的页面来呈现 CommentForm。 并创建一个单独的 url 用于发布详细信息并创建评论。

此外,如果你想去掉空格和制表符,你可以使用 isspace() 字符串方法https://www.geeksforgeeks.org/python-string-isspace-method/

暂无
暂无

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

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