使用Django映射的DB Query

时间:2013-09-05 13:35:49

标签: python django

我有两个Model类定义如下:

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)

我需要查询一组Program对象,其中链接到该Program的User-objects未超过user_limit。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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'))