2012-03-18 36 views
2

我有一个djano模型:如何在Django中找到具有最小related_set的对象?

class Expiration(models.Model): 
    UNIT_CHOICES = (
     ('M', 'Month'), 
     ('W', 'Week') 
    ) 
    unit = models.CharField(max_length = 1, choices= UNIT_CHOICES) 
    number_of_units = models.IntegerField(default=1) 
    offset = models.IntegerField(default=1) 

class Profile(models.Model): 
    name   = models.CharField(default="tmp", max_length=32, blank=True) 
    expiration_period = models.ForeignKey(Expiration, blank=True, null=True) 

我需要做的就是获取到期的该实例具有与它一式两份的情况下,相关的配置文件的数量最少,返回他们中的一个。或者更好地说,如果exp是到期实例,我正在寻找最小的expexp.profile_set.count()

任何人有什么想法?

回答

6

Annotate您的查询使用每个过期的配置文件数设置。然后按注释字段排序。具有最少(或最少联合)配置文件的配置文件是查询集的第一个结果。

全部放在一起,你必须:

from django.db.models import Count 

Expiration.objects.annotate(num_profiles=Count('profile')).order_by('num_profiles')[0] 
+0

完美的答案。谢谢 – Nasir 2012-03-18 16:38:51

相关问题