0

Je veux afficher un commentaire et ses réponses dans le modèle. Mais il y a un problème, chaque réponse peut avoir d'autres réponses. L'extrait ci-dessous est mon modèle Comment et CommentReply:Comment faire pour afficher les commentaires et ses réponses dans les modèles 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) 

Mise à jour: J'ai aussi un modèle pour tous les commentaires que WorksComments liées au travail que modèle enregistré là-bas.

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) 

L'extrait ci-dessous est mon avis:

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

Ma question est de savoir comment afficher les commentaires et il est des réponses sous, et chaque réponse peut avoir d'autres replyies que je veux les afficher aussi.

+0

Qu'est-ce que votre point de vue ressemble? –

+0

Je l'ai mis à jour et ajouté la vue. – msln

Répondre

0

Les choses d'abord ... mettez ceci dans vos signets; https://ccbv.co.uk/

Vous allez vouloir un Detail View ici je suspecte afin d'afficher les détails d'une instance.

URL de configuration ...

from django.conf.urls import url 

from work.views import WorkDetailView 

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

et une vue;

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 

alors une vue simple pourrait être work/work_detail.html:

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

ce n'est pas une page distincte. Je veux afficher des commentaires dans une partie de la page 'work.html'. ma vue hérite de View. comment puis-je les afficher dans la vue Class_Based qui hérite de View? merci – msln

+0

@msln 'DetailView' hérite également de' View'. Ce qui précède pourrait rendre 'work.html', puis mettre simplement la boucle de commentaire dans le balisage de la partie latérale. Il semble que mon exemple est ce que vous avez déjà, mais vous avez seulement posté la ligne pour obtenir les commentaires et rendre la réponse, alors j'ai donné un exemple complet. –