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

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

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讲师

membalas semua(3)
洪涛

Ia boleh direka bentuk seperti ini, tiada masalah untuk ulasan yang lebih mendalam, anda hanya perlu menambah medan pengulas dan penerima ulasan dalam jadual ulasan sekunder untuk pengenalan. Ini secara amnya bagaimana ulasan blog saya berfungsi. Untuk kesan khusus, sila rujuk: https://www.rapospectre.com/b... . Pelaksanaan khusus: https://github.com/bluedazzle...

阿神

Terima kasih atas jemputan

Menurut idea anda, tidak ada masalah Komen peringkat pertama adalah ulasan pada blog, dan ulasan peringkat kedua sebenarnya adalah balasan kepada komen blog tertentu. Tidak kira sama ada orang yang membalas blogger atau orang lain, ia dianggap sebagai balasan.

Saya rasa cukup untuk mempertimbangkan tahap kedua Malah komen dan balasan dalam ruang QQ hanya dua tahap Bagi balasan berulang, cuma tunjukkan siapa yang membalas kepada siapa dan kemudian susun mengikut masa. Untuk butiran, sila rujuk blog di tingkat 2.

Secara peribadi, saya rasa anda boleh mengabaikan komen Tahap 3 dan Tahap 4, asalkan anda faham bahawa komen adalah untuk blog, dan balasan adalah untuk ulasan. Terlalu banyak tahap bersarang boleh menyebabkan masalah.

Dikemas kini pada 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 = ...                        # 回复时间

Saya mungkin akan mereka pangkalan data seperti ini akan terdapat berbilang ulasan di bawah blog, dan akan terdapat berbilang balasan di bawah setiap ulasan.

巴扎黑

Jika komen hanya tahap 2, tiada masalah dengan idea umum.
Tetapi anda perlu berfikir bahawa ulasan sekunder anda juga boleh diulas. Jadi mungkin ada tingkatan tiga dan empat. . Komen.
Ini akan menyebabkan masalah dengan reka bentuk anda.
Ini sebenarnya masalah yang agak klasik Tetapi jika saya mereka bentuknya, saya akan mereka bentuknya berdasarkan model pokok

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan