0

我想显示评论,它是模板中的回复。但有一个问题,每个答复可能有其他答复。以下代码段是我CommentCommentReply型号:如何显示评论和它在django模板中的回复?

class Comment(models.Model): 
    author = models.ForeignKey(Profile, related_name="c_sender", on_delete=models.CASCADE, unique=False) 
    comment = models.CharField(max_length=500, unique=False) 
    created_date = models.DateTimeField(auto_now_add=True) 
    edited_date = models.DateTimeField(blank=True, null=True) 

    def __str__(self): 
     return self.comment 

    @property 
    def replys(self): 
     return CommentReply.objects.filter(comment_id=self) 


class CommentReply(models.Model): 
    comment_id = models.ForeignKey(Comment, related_name='sender', on_delete=models.CASCADE) 
    reply_id = models.ForeignKey(Comment, related_name='reply', on_delete=models.CASCADE) 

更新时间: 我也有WorksComments那每一个相关评论上班保存有模型的模型。

class WorkComment(models.Model): 
    work_id = models.ForeignKey(Work, on_delete=models.CASCADE, related_name='e_exercise', unique=False) 
    comment_id = models.ForeignKey(Comment, related_name='e_comment', unique=False) 

以下代码段是我的看法:

comments = WorkComment.objects.filter(work_id=work).all() 
return render(request, 'work.html', {'comments': comments}) 

我的问题是如何显示的意见和它的答复中它,每一个回答可能有,我想显示他们太多其他一些replyies。

+0

什么是您的看法是什么样子? –

+0

我更新了它并添加了视图。 – msln

回答

0

第一件事第一......把它放在你的书签; https://ccbv.co.uk/

你会想要一个Detail View这里我怀疑为了显示一个实例的细节。

设置网址...

from django.conf.urls import url 

from work.views import WorkDetailView 

urlpatterns = [ 
    url(r'^(?P<id>[-\d]+)/$', WorkDetailView.as_view(), name='work-detail'), 
] 

和一个视图;

from django.views.generic.detail import DetailView 
from django.utils import timezone 

from work.models import Work 

class WorkDetailView(DetailView): 

    model = Work 

    def get_context_data(self, **kwargs): 
     context = super(WorkDetailView, self).get_context_data(**kwargs) 
     context['comments'] = WorkComment.objects.filter(work_id=self.object.id).all() 
     return context 

然后简单的观点可能是work/work_detail.html

<h1>{{ object.title }}</h1> 
<p>{{ object.content }}</p> 
<h2>Comments</h2> 
{% for comment in comments %} 
    {{ comment }} 
{% endfor %} 
+0

它不是一个单独的页面。我想在'work.html'页面的一部分显示注释。我的视图继承自View。我如何在从View继承的基于Class_Based的视图中显示它们?谢谢 – msln

+0

@msln'DetailView'也从'View'继承。上面的代码可以渲染为'work.html',然后将注释循环放入侧面部分的标记中。这听起来像我的例子是你已经得到的,但你只是张贴线来获得评论和回应,所以我给了一个完整的例子。 –