【问题标题】:Cannot retrieve specific data from django?无法从 django 检索特定数据?
【发布时间】:2017-05-20 14:35:38
【问题描述】:

我正在尝试创建一个简单的页面,其中包含 1 个视频和尽可能多的 cmets 以及每个评论回复

我基本上创建了三个模型,一个用于视频,一个用于评论,一个用于回复。然后我尝试检索视图文件中的数据。

我成功检索到视频和 cmets,但未能检索到每条评论的回复。

我正在使用 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):
    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)

这是另一个视图.py 我也试过了,但没有用

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)

【问题讨论】:

    标签: python django sqlite


    【解决方案1】:

    当你这样做时:

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

    'cmets' 包含一个查询集。您接下来要做的是要求每个回复都带有该 QuerySet 上的评论,而不是使用 '=' 进行比较:

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

    相关文档:https://docs.djangoproject.com/en/dev/ref/models/querysets/#in

    编辑:将其更改为“回复”而不是“回复”

    edit2:添加文档链接

    【讨论】:

    • 感谢您的回答。我正在尝试遍历 cmets 和回复,但它不断给我每条评论的回复总数。对此的任何帮助都将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 2012-11-06
    • 2020-11-08
    • 2016-06-04
    • 2021-12-11
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多