没有过开发经验的新手,拜托各位大神指点一下,我应该怎么改进下面我下面这种二级评论的设计?如果描述的不够详细,我再补充。
ps: 我的思路,就是一篇文章和一级评论形成一对多的关系,然后一级评论和二级评论又形成一对多的关系。
models.py
class BlogComment(models.Model):
"""这是一级评论"""
user_name = models.CharField('Name', max_length=100) # 指定用户名
body = models.TextField('Content') # 评论的主体
# 将一级评论关联对应的文章
article = models.ForeignKey('Article', verbose_name='Article',
on_delete=models.CASCADE)
class SubComment(BlogComment):
"""这是二级评论,继承自一级评论,但是增加了一个parent_comment属性"""
# 将二级评论关联对应的一级评论
parent_comment = models.ForeignKey('BlogComment', verbose_name='BlogComment',
on_delete=models.CASCADE)
froms.py中指定评论的表单
class BlogCommentForm(forms.ModelForm):
"""一级评论的表单"""
class Meta:
model = BlogComment # 指定一级评论的model
fields = ['user_name', 'body']
widgets = {
'user_name': forms.TextInput(attrs={
'required': 'required',
}),
'body': forms.Textarea(attrs={
'required': 'required',
}),
}
class SubCommentForm(BlogCommentForm):
"""二级评论的表单,继承自一级评论的表单"""
class Meta:
model = SubComment # 制定二级评论的model
fields = copy.deepcopy(BlogCommentForm.Meta.fields)
widgets = copy.deepcopy(BlogCommentForm.Meta.widgets)
views.py
class CommentPostView(FormView):
"""一级评论视图层"""
form_class = BlogCommentForm
template_name = 'blog/article.html'
def form_valid(self, form):
# 保存表单到数据库
comment = form.save(commit=False)
comment.save()
return HttpResponseRedirect('/')
def form_invalid(self, form):
# ... 一些提示用户表单输入不合理的信息
class SubCommentView(CommentPostView):
"""二级评论视图层,继承与一级评论视图层"""
# 覆盖form_class成二级评论的表单
form_class = SubCommentForm
이렇게 디자인해도 문제 없습니다. 더 깊은 댓글의 경우 식별을 위해 보조 댓글 테이블에 댓글 작성자와 댓글 작성자의 필드만 추가하면 됩니다. 이것이 일반적으로 내 블로그 댓글이 작동하는 방식입니다. 구체적인 효과는 https://www.rapospectre.com/b... 를 참고하세요. 구체적인 구현: https://github.com/bluedazzle...
초대해주셔서 감사합니다
귀하의 생각으로는 문제가 없는 것으로 보입니다. 1차 댓글은 블로그에 달린 댓글이고, 2차 댓글은 실제로 특정 블로그 댓글에 대한 답변인 것으로 보입니다. 블로거 또는 다른 사람의 답변으로 간주됩니다.
QQ 공간의 댓글과 답글도 2단계만 고려하면 충분할 것 같아요. 자세한 내용은 2층 블로그를 참고해주세요.
개인적으로 3급, 4급 댓글은 블로그를 위한 댓글이고 댓글을 위한 답글이라는 점만 이해하시면 무시해도 된다고 생각합니다. 중첩된 레벨이 너무 많으면 지연이 발생합니다.
2016-11-17 19:17 업데이트
으아악아마도 데이터베이스를 이렇게 디자인할 것입니다. 블로그 아래에는 여러 개의 댓글이 있고, 각 댓글 아래에는 여러 개의 답글이 있을 것입니다.
댓글이 2레벨만 되어도 일반적인 생각에는 문제가 없습니다.
하지만 2차 댓글에도 댓글이 달릴 수 있다는 점을 생각하셔야 합니다. 따라서 레벨 3과 레벨 4가 있을 수 있습니다. . 논평.
이렇게 하면 디자인에 문제가 발생할 수 있습니다.
이건 사실 비교적 고전적인 문제인데, 제가 디자인한다면 나무 모델을 기준으로 디자인하겠습니다.