検索

ホームページ  >  に質問  >  本文

python - 请问我这样设计django文章的二级评论是否合理?

没有过开发经验的新手,拜托各位大神指点一下,我应该怎么改进下面我下面这种二级评论的设计?如果描述的不够详细,我再补充。

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 
PHP中文网PHP中文网2810日前639

全員に返信(3)返信します

  • PHP中文网

    PHP中文网2017-04-18 09:58:18

    このように設計しても問題ありません。より深いコメントについては、識別のために二次コメント テーブルにコメント者とコメント対象者のフィールドを追加するだけです。私のブログへのコメントは通常このように行われます。具体的な効果については、https://www.rapospectre.com/b... を参照してください。具体的な実装: https://github.com/bluedazzle...

    返事
    0
  • 阿神

    阿神2017-04-18 09:58:18

    ご招待ありがとうございます

    あなたの考えによれば、第 1 レベルのコメントはブログへのコメントであり、第 2 レベルのコメントは実際にあるブログのコメントに対する返信であるかどうかは関係ありません。ブロガーまたは他の誰かの場合、それは返信とみなされます。

    QQ スペースのコメントや返信も 2 段階だけで、誰が誰に返信したかを表示し、時間順に並べ替えるだけで十分だと思います。詳しくは2階ブログをご覧ください。

    個人的には、レベル 3 とレベル 4 のコメントは、コメントがブログに対するものであり、返信がコメントに対するものであることを理解している限り、無視しても問題ないと思います。ネストされたレベルが多すぎると遅延が発生します。

    2016-11-17 19:17更新

    リーリー

    私はおそらく次のようにデータベースを設計します。ブログの下には複数のコメントがあり、各コメントの下には複数の返信があります。

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:58:18

    コメントがレベル 2 だけであれば、一般的な考え方としては問題ありません。
    しかし、あなたの二次的なコメントもコメントできると考えなければなりません。したがって、レベル 3 とレベル 4 がある可能性があります。 。コメント。
    これにより、デザインに問題が発生します。
    これは実際には比較的古典的な問題ですが、私がそれを設計するとしたら、ツリー モデルに基づいて設計します。

    返事
    0
  • キャンセル返事