Django为评论添加评论模型

Sur*_*a94 1 python django django-models

我有一个模型新闻和模型评论。它工作正常。

class News(models.Model):
    title = models.CharField(max_length=100)
    text = models.TextField()
    date = models.DateTimeField(auto_now_add=True)

class Comment(models.Model):
    text = models.TextField()
    for_news = models.ForeignKey(News)
Run Code Online (Sandbox Code Playgroud)

在 admin.py

 from .models import News, Comment
 class NewsAdd(admin.StackedInline):
    model = Comment
    extra = 0

 class newseAdmin(admin.ModelAdmin):
    inlines = [NewsAdd]

 admin.site.register(News, newseAdmin)
Run Code Online (Sandbox Code Playgroud)

在视图中

def showNews(request, news_id=1):
    news = Article.objects.get(id=article_id)
    comments = Comment.objects.filter(comments_news_id=article_id)
    return render(request, 'page.html', {'news': news, 'comments': comments})
Run Code Online (Sandbox Code Playgroud)

如何添加回复评论的机会?什么是评论的级联评论。

Nav*_*pak 6

据我了解,您试图让用户重播已发布的评论。

以下是您需要做的:

models.py

class Comment(models.Model):
    text = models.TextField()
    for_news = models.ForeignKey(News)
    reply_to = models.ForeignKey("self", null=True, blank=True, on_delete=models.CASCADE, related_name='replies')
Run Code Online (Sandbox Code Playgroud)

现在,您可以通过提供评论 ID 或您可以用来识别评论的任何内容来让用户回复某个评论。

您的模板中可能需要一些 JavaScript 代码。只要用户点击评论的回复按钮,您就可以添加一个带有父评论 ID 的隐藏字段,在您的视图中,您只需检查是否有任何 ID 已传递给您的视图。

简单的例子:

views.py

replied_comment = request.POST.get('your comment id input name')

try:
    comment_object = Comment.objects.get(pk=replied_comment)
except:
    comment_object = None

comment = Comment(text="Some Text", for_news=news_object, reply_to=comment_object)
comment.save()
Run Code Online (Sandbox Code Playgroud)