Django:涉及OneToOneField过滤器的相当复杂的查询?

时间:2011-02-15 22:24:55

标签: django django-models

任何人都可以帮我解决一些相当复杂的Django查询吗?

这些是我的模特:

class County(models.Model):
    name = models.CharField(max_length=100)
class Place:
    id = models.IntegerField(primary_key=True)
    county = models.ForeignKey(County) 
class Translation(models.Model):
    place = models.OneToOneField(Place,null=True)
    county = models.ForeignKey(County) # Have denormalised for ease, but could delete this.  
    text = models.TextField()
    user = models.ForeignKey(User, null=True, blank=True)
    user_ip = models.IPAddressField()
    created = models.DateField(auto_now_add=True)

如何运行以下查询?

  • 查找具有多个翻译的用户,然后按降序翻译次数进行排序
  • 对于指定的县,请找到没有相关翻译的地点
  • 对于指定的县,请找到包含 most 翻译
  • 的5位用户

我应该更改数据库设置以使其更容易吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

User.objects.all().annotate(Count('translation')).order_by('-translation__count')

County.place_set.filter(translation=None)

User.objects.all().filter(
   translation__county__name="my_county"
).annotate(Count("translation")).order_by('-translation__count')[:5]