python - 请问我这样设计django文章的二级评论是否合理?
PHP中文网
PHP中文网 2017-04-18 09:56:18
0
3
634

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

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中文网

认证高级PHP讲师

répondre à tous(3)
洪涛

Il peut être conçu comme ça, pas de problème. Quant aux commentaires plus profonds, il vous suffit d'ajouter les champs du commentateur et du commenté dans la table des commentaires secondaire pour identification. C’est généralement ainsi que se font les commentaires sur mon blog. Pour des effets spécifiques, veuillez vous référer à : https://www.rapospectre.com/b... . Implémentation spécifique : https://github.com/bluedazzle...

阿神

Merci pour l'invitation

Selon votre idée, il n'y a pas de problème. Le commentaire de premier niveau est un commentaire sur le blog, et le commentaire de deuxième niveau est en fait une réponse à un certain commentaire de blog. Peu importe que la personne qui répond le soit. le blogueur ou quelqu'un d'autre, cela est considéré comme une réponse.

Je pense qu'il suffit de considérer le deuxième niveau. Même les commentaires et les réponses dans l'espace QQ ne sont que deux niveaux. Quant aux réponses répétées, montrez simplement qui a répondu à qui, puis triez-les par heure. Pour plus de détails, veuillez vous référer au blog au 2e étage.

Personnellement, je pense que vous pouvez ignorer les commentaires de niveau 3 et 4, tant que vous comprenez que les commentaires sont destinés au blog et que les réponses sont destinées aux commentaires. Un trop grand nombre de niveaux imbriqués peut entraîner des problèmes.

Mis à jour le 17/11/2016 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 = ...                        # 回复时间

Je vais probablement concevoir la base de données comme ceci. Il y aura plusieurs commentaires sous un blog, et il y aura plusieurs réponses sous chaque commentaire.

巴扎黑

Si le commentaire n'est que de niveau 2, il n'y a aucun problème avec l'idée générale.
Mais il faut penser que vos commentaires secondaires peuvent aussi être commentés. Il peut donc y avoir des niveaux trois et quatre. . Commentaire.
Cela entraînera des problèmes avec votre conception.
C'est en fait un problème relativement classique. Mais si je devais le concevoir, je le concevrais sur la base du modèle de l'arbre

.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal