Reputation: 7752
I have a query like this:
select files_id, count(DISTINCT shared_user_id) FROM fileupload_share GROUP BY files_id;
which I want to convert in Django query. Tried like this:
count = Share.objects.filter(users_id=request.user.id).values_list('shared_user_id').distinct().count()
but doesn't give me a group by required output. I want the output to be returned in a list like
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()
How can I do that? Thanks
Upvotes: 0
Views: 1536
Reputation: 3236
Try something like this:
files = File.objects.filter(users_id=request.user.id).annotate(count=Count('share__shared_user_id')
Then you should have
for f in files:
print f.file_name, f.count
Upvotes: 1