【问题标题】:Django queryset filter by arrayDjango 查询集按数组过滤
【发布时间】:2015-10-06 11:10:30
【问题描述】:

我有一个模型:

class MyUser(AbstractBaseUser, PermissionsMixin):
    class Meta():
        db_table = 'my_user'
    ...
    interests = models.ManyToManyField(Interest, blank=True, db_index=True)

我必须写两个查询:

1) 获取 Interest_id = 1 或 5 或 4 的 MyUsers。

2) 获取 Interest_id = 1 和 5 和 4 的 MyUsers。

我的数据库是 PostgreSQL。

我为第一种情况编写了 SQL 查询:

SELECT DISTINCT myuser_id FROM my_user_interests WHERE interest_id = ANY(array[1,5,4]);

但我无法在第二种情况下使用它。

无论如何我需要用 Django ORM 来做这件事,因为我还需要通过新参数来编辑这个查询集,如果我使用 .raw()..

请帮帮我。

【问题讨论】:

  • 该 SQL 与 ... WHERE interest_id IN [1, 5, 4]) 有何不同?
  • 布兰登,是的,但它不能正常工作。 users = users.filter(interests__in=[1, 5, 4]) Daniel,错误:“[”第 1 行或附近的语法错误:...CT * FROM my_user_interests WHERE interest_id IN [1, 5, 4]跨度>
  • 布兰登,我错了,“__in”是第一种情况的正确方法,但第二种情况的解决方案仍然开放..

标签: django postgresql django-queryset


【解决方案1】:

我已经解决了这个问题/

1)

users = users.filter(interests__in=[1, 5, 4])

2)

list_ = [1, 5, 4]
for i in len(list_):
    users = users.filter(interests=i)

【讨论】:

    猜你喜欢
    • 2012-05-18
    • 2018-09-26
    • 1970-01-01
    • 2013-04-20
    • 2019-02-09
    • 1970-01-01
    • 2020-08-22
    • 2019-04-15
    相关资源
    最近更新 更多