我有一个模型新闻和模型评论它。 它的工作正常。
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})
如何添加回复评论的机会?什么是评论的级联评论。
答案 0 :(得分:1)
据我所知,您试图允许用户重播已发布的评论。
以下是您需要做的事情:
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()
答案 1 :(得分:-1)
虽然问题不明确,但根据您的代码所做的事情,我猜您正试图获取该条新闻的所有评论。
因此,在您的视图功能中,您应该这样说:
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 })
如果这不是您想要做的,请详细说明您的目标。