【问题标题】:How to convert this MySQL query to a Django query?如何将此 MySQL 查询转换为 Django 查询?
【发布时间】:2013-03-15 12:06:47
【问题描述】:

我有一个这样的查询:

select files_id, count(DISTINCT shared_user_id) FROM fileupload_share GROUP BY files_id;

我想在 Django 查询中转换。尝试这样:

count = Share.objects.filter(users_id=request.user.id).values_list('shared_user_id').distinct().count()

但没有按要求的输出给我一个组。我希望输出在列表中返回,如

count = [1, 2, 3, 1]

models.py:

class Share(models.Model):
    users = models.ForeignKey(User)
    files = models.ForeignKey(File)
    shared_user_id = models.IntegerField()
    shared_date = models.TextField()

class File(models.Model):
    users = models.ForeignKey(User)
    file_name = models.CharField(max_length=100)
    type = models.CharField(max_length=10)
    source = models.CharField(max_length=100)
    start_date = models.TextField()
    time_overview = models.CharField(max_length=55)
    end_date = models.TextField()
    duration = models.TextField()
    size_overview = models.IntegerField()
    size = models.TextField()
    flag = models.TextField()
    flag_r = models.TextField()

我该怎么做?谢谢

【问题讨论】:

  • 此问题与您之前创建的问题相同
  • 是的,但我没有得到预期的答案。
  • 你知道你也可以回退到原始 sql docs.djangoproject.com/en/dev/topics/db/sql
  • 另外,我已经接受了我的问题的最佳 SQL 答案。

标签: mysql django django-queryset


【解决方案1】:

试试这样的:

files = File.objects.filter(users_id=request.user.id).annotate(count=Count('share__shared_user_id')

那你应该有

for f in files:
    print f.file_name, f.count

【讨论】:

  • 谢谢,但我如何与文件模型集成。生成文件信息并显示每个文件的共享计数。
  • 更新了我的答案。我无法对其进行测试,因此可能是其中的错误。
  • 成功了,伙计,不过我还有另一个问题。我想找到共享文件的用户名。我该怎么做?
猜你喜欢
  • 1970-01-01
  • 2018-05-08
  • 2011-02-01
  • 2023-01-31
  • 2019-02-13
  • 2014-01-06
  • 1970-01-01
  • 2016-06-04
  • 2021-06-23
相关资源
最近更新 更多