【问题标题】:can't figure out how to use distinct() django不知道如何使用 distinct() django
【发布时间】:2012-08-23 12:39:54
【问题描述】:

请帮我从我的输出中删除重复项:

views.py

if request.is_ajax():
        subjects = Subjects.objects.distinct().order_by('-num_of_followers')[:5]
        result = serializers.serialize("json", subjects) 

如您所见,distinct() 没有做任何事情。

我现在的输出如下所示:

aaa
aaa
aaa
bbb
ccc

但我希望它是这样的:

aaa
bbb
ccc

更新

现在我的数据库是这样的:

Database changed
mysql> SELECT * FROM school_subjects;
+----+----------+---------+------------+---------------------+------------------+
| id | name     | user_id | created_by | created_time        | num_of_followers |
+----+----------+---------+------------+---------------------+------------------+
|  1 | Math 140 |       1 | rrr        | 2012-08-23 12:11:55 |                4 |
|  2 | lll      |       2 | aaa        | 2012-08-23 14:25:13 |                2 |
|  3 | kmkk     |       2 | aaa        | 2012-08-25 14:11:42 |                2 |
|  4 | llll     |       2 | aaa        | 2012-08-25 14:11:57 |                2 |
|  5 | Math 140 |       3 | qqq        | 2012-08-25 15:29:44 |                4 |
|  6 | qweqw    |       3 | qqq        | 2012-08-25 15:30:32 |                1 |
|  7 | lalala   |       3 | qqq        | 2012-08-25 15:38:57 |                1 |
|  8 | kkdkdk   |       3 | qqq        | 2012-08-25 17:49:25 |                1 |
|  9 | aaaa     |       2 | aaa        | 2012-08-27 19:13:49 |                1 |
| 10 | mmcmcm   |       2 | aaa        | 2012-08-27 19:22:10 |                1 |
| 11 | aaaaa    |       2 | aaa        | 2012-08-27 21:17:32 |                1 |
| 12 | Math 140 |       2 | aaa        | 2012-08-27 21:25:07 |                4 |
+----+----------+---------+------------+---------------------+------------------+
12 rows in set (0.00 sec)

我得到的 JSON:

[{"pk": 1, "model": "school.subjects", "fields": {"created_time": "2012-08-23 12:11:55", "num_of_followers": 4, "name": "Math 140", "created_by": "rrr", "user": 1}}, {"pk": 12, "model": "school.subjects", "fields": {"created_time": "2012-08-27 21:25:07", "num_of_followers": 4, "name": "Math 140", "created_by": "aaa", "user": 2}}, {"pk": 5, "model": "school.subjects", "fields": {"created_time": "2012-08-25 15:29:44", "num_of_followers": 4, "name": "Math 140", "created_by": "qqq", "user": 3}}, {"pk": 4, "model": "school.subjects", "fields": {"created_time": "2012-08-25 14:11:57", "num_of_followers": 2, "name": "llll", "created_by": "aaa", "user": 2}}, {"pk": 3, "model": "school.subjects", "fields": {"created_time": "2012-08-25 14:11:42", "num_of_followers": 2, "name": "kmkk", "created_by": "aaa", "user": 2}}]

从这个例子你可以看到我得到了 Math 140 3 次,但我希望它只出现一次。

谢谢。

【问题讨论】:

    标签: python mysql django django-models


    【解决方案1】:

    文档有 some specific information 关于使用 distinct 以及使用 order_by 对其有何影响

    尝试切换顺序,同时指定字段:

    Subjects.objects.order_by('created_by', '-num_of_followers')\
        .distinct('created_by')[:5]
    

    【讨论】:

    • 不幸的是,它没有用!我试图遵循 API 并做了完全相同的事情,但什么也没发生
    • 还有一个问题:如果我的数据库中只有 3 个条目,其中 2 个是 Math 140,则结果是 Math 140(两次),而不是另一个条目
    • 然后在order_bydistinct的'created_by'之前或之后添加'name'
    • 问题是,django给了我一个distinct()接受一个参数的错误......
    • 我什至尝试只执行原始查询,并执行以下操作:SELECT DISTINCT name FROM school_subjects ORDER BY num_of_followers DESC;,使用 connection.cursor 但 PyDev 无法识别 cursor()跨度>
    猜你喜欢
    • 2011-11-04
    • 2021-11-21
    • 2019-11-18
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    相关资源
    最近更新 更多