Python Django为注释添加注释模型

Python Django为注释添加注释模型,python,django,django-models,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 = mo

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

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

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

尽管问题不清楚,但从代码所做的工作来看,我猜您正在尝试获取该新闻的所有评论

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

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

如果这不是您想要做的,请详细说明您想要做什么。

虽然问题不清楚,但从您的代码所做的工作来看,我猜您正在尝试获取这条新闻的所有评论

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

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

如果这不是你想要做的,请详细说明你想要什么。

据我所知,你试图允许用户重播已经发布的评论

以下是您需要做的:

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')
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()
现在,您可以通过提供注释id或任何您可以识别注释的内容,让用户回复某个注释

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

简单的例子:

views.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')
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()

据我所知,您试图允许用户重播已发布的评论

以下是您需要做的:

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')
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()
现在,您可以通过提供注释id或任何您可以识别注释的内容,让用户回复某个注释

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

简单的例子:

views.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')
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()

请尝试改进语法和英语,因为我什么都不懂:),你的意思是如何添加并创建评论的重播吗?同意@mohammedqudah,它不是很清楚,请尝试重写你的问题你的问题不是很清楚,但看起来你试图创建一个评论树。查阅“Django树模型”以获得灵感。你不必使用它们中的任何一个,但它们为你的实现提供了一个良好的起点。请尝试改进语法和英语,因为我什么都不懂:),你的意思是如何添加并为评论创建重播??同意@mohammedqudah,这不是很清楚,请尝试重写您的问题您的问题不是很清楚,但看起来您试图创建一个评论树。查阅“Django树模型”以获得灵感。您不必使用它们中的任何一个,但它们为您的实现提供了一个良好的起点。