2017-01-05 28 views
0

は私が1本のビデオとそれが持っている限り多くのコメントを含む単純なページを作成しようとしていると各コメントは、私は基本的に3つのモデル、ビデオのための1つのコメントのための1、応答のための1つを作成しdjangoから特定のデータを取得できませんか?

応答します。私はビューファイル内のデータを取得しようとしました。

ビデオとコメントは正常に取得されましたが、各コメントの返信は取得できませんでした。

私は「も、このことを試みたが、なかったの、これは別のview.py あるジャンゴ1.10.4

models.py

class Video(models.Model): 
    title = models.CharField(max_length=120) 
    embed_code = models.CharField(max_length=500) 
    slug = models.SlugField(null=True, blank=True) 
    category = models.ForeignKey("Category", null=True) 
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True, auto_now_add=False) 
    active = models.BooleanField(default=True) 
    featured = models.BooleanField(default=False) 
    free_preview = models.BooleanField(default=False) 
    share_message = models.CharField(max_length=150, default=default_share_message) 

    objects = models.Manager() 
    # activemodel = ActiveModel() 
    featuresandactive = Features() 
    class Meta: 
     unique_together = ('slug', 'category') 
    def __str__(self): 
     return self.title 

    def get_absolute_url(self): 
     try: 
      return reverse('video_detail', kwargs={'vid_slug':self.slug, 'cat_slug':self.category.slug}) 
     except: 
      return "/" 


class Comment(models.Model): 
    user = models.ForeignKey(MyUser) 
    path = models.CharField(max_length=350) 
    video = models.ForeignKey(Video, null=True, blank=True) 
    text = models.TextField() 
    updated = models.DateTimeField(auto_now=True, auto_now_add=False) 
    Timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) 
    active = models.BooleanField(default=True) 


    objects = CommentManager() 
    def __str__(self): 
     return self.text 


class Reply(models.Model): 
    user = models.ForeignKey(MyUser) 
    comment = models.ForeignKey(Comment,null=True, blank=True) 
    text = models.TextField() 
    updated = models.DateTimeField(auto_now=True, auto_now_add=False) 
    Timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) 
    active = models.BooleanField(default=True) 


    objects = ReplyManager() 
    def __str__(self): 
     return self.text 

views.py

def video_detail(request, cat_slug, vid_slug): 

    cat = Category.objects.get(slug=cat_slug) 
    comments = Comment.objects.filter(video=obj) 
    replys = Reply.objects.filter(comment=comments) 

    context = { 

    "cat": cat, 
    "obj":obj, 
    "comments":comments, 
    "replys":replys, 

    } 
    return render(request, 'video_detail.html', context) 

を使用しています

def video_detail(request, cat_slug, vid_slug): 

    cat = Category.objects.get(slug=cat_slug) 

    obj = Video.objects.get(slug=vid_slug) 

    comments = obj.comment_set.all() 

    replys = comments.reply_set.all() 

    context = { 

    "cat": cat, 
    "obj":obj, 
    "comments":comments, 
    "replys":replys 
    } 
    return render(request, 'video_detail.html', context) 

答えて

0

これを行うと、

comments = Comment.objects.filter(video=obj) 

「comments」にはQuerySetが含まれています。それは「返信」に変更:

replies = Reply.objects.filter(comment__in=comments) 

関連文書:https://docs.djangoproject.com/en/dev/ref/models/querysets/#in

編集をあなたは次のやりたいことは代わりに「=」を使用して比較すること、そのクエリセット上にあるコメントとすべての返信をお願いしています「返信」の代わりに

edit2:追加文書リンク

+0

ありがとうございます。私はコメントと返信をループすることを試みていますが、各コメントへの返信の合計量を引き続き与えてくれます。それを助けてくれれば助かります。 –

関連する問題