0

我有两个模型类定义如下:

class Program(models.Model):
    name = models.CharField(max_length=100)
    user_limit = models.IntegerField()

class User(models.Model):
    name = models.CharField(max_length=300)
    program= models.ForeignKey(Program)

我需要查询一组程序对象,其中链接到该程序的用户对象没有超过 user_limit。

4

2 回答 2

0

谢谢!大家帮忙。我花了一些时间在上面并想出了这个查询:

from django.db.models import F
from django.db.models import Count
Program.objects.annotate('user_count'=Count('user')).filter(user_limit__gte=F('user_count'))
于 2013-09-06T05:06:08.280 回答
0

您希望所有与其关联的用户数少于 user_limit 的程序。为了提高性能,我建议您使用 user_limit 和 user_count。每次将用户与程序关联时,计数都会增加。这样,您可以执行更简单的查询,并获得更高的性能。

from django.db.models import F Program.objects.filter(user_count__lte=F("user_limit")) http://docs.djangoproject.com/en/dev/topics/db/queries/#filters-can-reference-fields-on-the-model

于 2013-09-05T19:34:04.730 回答