【问题标题】:Django query filter a set of dataDjango查询过滤一组数据
【发布时间】:2010-06-18 15:03:26
【问题描述】:

如果有类似的查询

    following = Relations.objects.filter(initiated_by = request.user)

其中我让所有用户跟随当前登录的用户, 我想显示这些用户的博客文章。使用如下查询:

    blog = New.objects.filter(created_by = following)

它只向我显示 id = 1 的用户的博客文章(尽管当前登录的用户实际上并没有关注他) 在模板中我有:

{% for object in blog %}
<a href='/accounts/profile_view/{{object.created_by}}/'> {{object.created_by}}</a> <br /> 
{{object.post}}<br />
{% endfor %}

我哪里错了?

【问题讨论】:

    标签: django filter character-encoding


    【解决方案1】:

    .filter() 返回一个集合,而不是一个事件。因此,我想说的问题是第二个查询应该是

    blog = New.objects.filter(created_by__in = following)
    

    【讨论】:

    • 奇怪的是,它没有输出我想要的。我想要实现的查询类似于:select * from new,follow where created_by = user or created_by = (select * from new where following = user)
    • 我不确定 django ORM 是否有 sql 的 OR,所以我可能会退回到使用两个查询。
    • 您可以使用 django.db.models 中的“Q”对象对 Django 执行“或”操作(请参阅我对答案的评论)
    【解决方案2】:

    甚至更简单:

    bloc = New.objects.filter(created_by__initiated_by = request.user)
    

    但这对我来说感觉很奇怪......你确定你的模型设计吗?

    【讨论】:

    • 简而言之,我想“翻译”这样的查询:select * from new,follow where created_by = user or created_by = (select * from new where following = user)
    • 所以也许您需要使用允许进行“或”查询的 django 'Q' 对象: from django.db.models import Q MyModel.objects.filter(Q(some_field = something) | Q(some_other_field = foobar))
    猜你喜欢
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    相关资源
    最近更新 更多