搜尋

首頁  >  問答  >  主體

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中文网2827 天前644

全部回覆(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

    謝邀

    按照你的思路是沒有問題的,一級評論是對博客的評論,二級評論其實是對某條博客評論的一個回复,不管回复的人是博主還是其他人都算是回复。

    我覺得考慮二級就可以了,即使QQ空間的說說評論與回復也就兩級,至於反复的回复只要展示誰回复誰,然後按時間排個序就可以了。具體就參考2樓的部落格即可。

    對於三級、四級的評論,個人覺得可以不考慮,只要理解評論都是針對博客的,回复則是針對評論的。嵌套的級數太多會很卡的。

    更新於 2016-11-17 19:17

    class Comment(models.Model):
        """评论"""
    
        user = models.ForeignKey(User)          # 评论用户
        body = models.TextField()               # 评论内容
        article = models.ForeignKey(Article)    # 博客
        created_at = ...                        # 评论时间
    
    class Reply(models.Model):
        """回复"""
        
        comment = models.ForeignKey(Comment)    # 评论
        from_user = models.ForeignKey(User)     # 回复用户
        to_user = models.ForeignKey(User)       # 被回复用户
        body = models.TextField()               # 回复内容
        created_at = ...                        # 回复时间

    我大概會這樣設計資料庫,一篇部落格下面會有多個評論,每個評論下面有多個回應。

    回覆
    0
  • 巴扎黑

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

    如果評論只有2級,大體思路沒有問題。
    但是你要想,你的二級評論,也是可以被評論的。所以有可能會有三級,四級。 。評論。
    這樣你的設計就會有問題。
    這其實是一個比較經典的問題了吧. 不過要是我去設計,我會根據樹模型去設計.

    回覆
    0
  • 取消回覆