繁体   English   中英

Django添加评论模型进行评论

[英]Django add comment model for comment

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

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)

在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)

视野中

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})

如何增加回复评论的机会? 该评论将是级联评论。

据我了解,您正在尝试允许用户重播已发布的评论。

这是您需要做的:

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')

现在,您可以通过提供评论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()

尽管问题尚不清楚,但是从您的代码的作用来看,我猜您正在尝试获取新闻的所有注释。

因此,在您的视图函数中,您应该这样说:

def showNews(request, news_id=1):
    headline_news = Article.objects.select_related().get(id=article_id)
    headline_news_comments = headline_news.news_set.all()
    return render(request, 'page.html', {'news': headline_news , 'comments': headline_news_comments })

如果这不是您要执行的操作,请详细说明您要执行的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM