[英]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.