2017-01-07 2 views
0

Ich erstelle eine Seite, die ein Video hat, so viele Kommentare, Antworten für jeden Kommentar Ich konnte Video und Kommentare abrufen, aber Antworten für jeden Kommentar wurden schließlich nicht abgerufen. Ich habe einige for-Schleifen in der Views-Datei erstellt, wusste aber auch nicht, wie man sie in der Template-Datei abruft. Ich bin bis jetzt
Django ORM - Fehler retreiving Daten -

Ich bin mit django 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): 
    id = models.AutoField(primary_key=True) 
    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) 

zwischen den Ansichten und Vorlagen stecken dies ein anderer view.py Ich versuchte dies auch, aber hat nicht funktioniert

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

    Replies = Reply.objects.filter(comment_id=comments.id)) 

    context = { 

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

Was ist das Problem, vor dem Sie stehen? Was ist das erwartete Verhalten, und wenn Sie sich mit einem Fehler konfrontiert sehen, was ist es? – karthikr

+0

'QuerySet' Objekt hat kein Attribut 'ID' ... Dies ist das erste Problem. es kann gelöst werden, wenn ich for-Schleife in der Ansicht verwende. aber wie könnte ich dann diese Daten in der Vorlagendatei bekommen. Ich versuche hauptsächlich, eine einfache Seite wie youtube Videoseite zu machen. 1 Video ..viele Kommentare. jeder Kommentar hat viele Antworten –

Antwort

0

IMO, können Sie die Kommentare in Ihrer Vorlage darstellen. Ihre Vorlage könnte so aussehen.

# your_template.html 
{% for comment in obj.comment_set.all %} 
    {{comment.user}}: {{comment.text}} 
    {% for reply in comment.reply_set.all %} 
     {{reply.user}}: {{reply.text}} 
    {% endfor %} 
{% endfor %} 

dann View-Funktion braucht nur cat und obj, nicht comments oder replies. Überprüfen Sie auch select_related.

+0

Leider hat es nicht wirklich funktioniert. Es konnte keine Daten parsen. –

Verwandte Themen