Django 如何使用来自不同查询的分组值连接一个表?
我有一个这样的模型:Django 如何使用来自不同查询的分组值连接一个表?,django,django-models,Django,Django Models,我有一个这样的模型: class Subscription(models.Model): visable_name = models.CharField(max_length=50, unique=True) recipe_name = models.CharField(max_length=50) website_url = models.URLField() class User(models.Model): username = models.Char
class Subscription(models.Model):
visable_name = models.CharField(max_length=50, unique=True)
recipe_name = models.CharField(max_length=50)
website_url = models.URLField()
class User(models.Model):
username = models.CharField(max_length=50)
class UserSubs(models.Model):
subscription = models.ForeignKey(Subscription, to_field='visable_name')
user = models.ForeignKey(User, to_field='username')
rank = UserSubs.objects.values('subscription').
annotate(total=Count('user')).
order_by('-total')`
我想做一个简单的排名,所以我想出了这样的办法:
class Subscription(models.Model):
visable_name = models.CharField(max_length=50, unique=True)
recipe_name = models.CharField(max_length=50)
website_url = models.URLField()
class User(models.Model):
username = models.CharField(max_length=50)
class UserSubs(models.Model):
subscription = models.ForeignKey(Subscription, to_field='visable_name')
user = models.ForeignKey(User, to_field='username')
rank = UserSubs.objects.values('subscription').
annotate(total=Count('user')).
order_by('-total')`
什么使:
>> rank
[
{'total': 3, 'subscription': u'onet'},
{'total': 2, 'subscription': u'niebezpiecznik'},
{'total': 1, 'subscription': u'gazeta'}
]
我需要的是类似的完整对象列表:
[
{'total': 3, 'subscription': <Subscription: onet>},
{'total': 2, 'subscription': <Subscription: niebezpiecznik>},
{'total': 1, 'subscription': <Subscription: gazeta>}
]
[
{'total':3,'subscription':},
{'total':2,'subscription':},
{'total':1,'subscription':}
]
我不确定“select_related”在这里是否有用,但我不知道如何使用它:(也许您可以使用dict和list comprehension,并将其作为简单的python对象过滤:
d = {sub.visable_name: sub for sub in Subscriptions.objects.all()}
new_rank = [
{
'total': row['total'],
'subscriptions': d[row['subscriptions']]
}
for row in rank
]
将提供什么:
>> new_rank
[
{'total': 3, 'subscriptions': <Subscriptions: onet>},
{'total': 2, 'subscriptions': <Subscriptions: niebezpiecznik>},
{'total': 1, 'subscriptions': <Subscriptions: gazeta.pl>}
]
>新排名
[
{'total':3,'subscriptions':},
{'total':2,'subscriptions':},
{'total':1,'subscriptions':}
]
最好从订阅构建查询,因为您需要它:
Subscription.objects.annotate(total=models.Count('usersubs')).order_by('-total')
这将给我:[,]
。有没有办法也为每个订阅获取总计
?没关系!现在我明白了,总计
现在是每个订阅的属性:)谢谢!:)