我有以下字段的用户模型。
class User(models.Model):
user_id = models.CharField(max_length=40,unique=True)
user_name = models.CharField(max_length=40)
user_email = models.EmailField()
user_city = models.CharField(max_length=40)
class Meta:
ordering = ['user_id']
verbose_name = 'User MetaData'
verbose_name_plural = 'Users MetaData'
def __unicode__(self):
return self.user_id
现在,我想按用户筛选排名前10的城市,即该城市中具有用户数的排名前10的城市的列表。我使用下面的语法,但总是我得到city_count = 1。
User.objects.annotate(city_count=models.Count('user_city')) .order_by('-city_count'))[:10]
我也尝试了以下语法但结果相同...
User.objects.values('user_city').annotate(city_count=models.Count('user_id')) .order_by('-city_count'))[:10]
我在哪里做错了?
您的第二个示例是正确的,只需修正拼写错误即可。代替
User.objects.values('user_city').annotate(city_count=models.Count('user_id')) .order_by('-city_count'))[:10]
和
User.objects.values('user_city').annotate(city_count=models.Count('user_city')).order_by('-city_count')[:10]
更新1:2:
top_cities_queryset = (User.objects
.values('user_city')
.annotate(user_city_count=models.Count('user_city'))
.order_by('-user_city_count')
.values_list('user_city', 'user_city_count'))
top_cities = [{city: count} for city, count in top_cities_queryset]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句