Как найти объект с наименьшим related_set в Django? - PullRequest
2 голосов
/ 18 марта 2012

У меня есть модель djano:

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)

Что мне нужно сделать, это выбрать тот экземпляр Expiration, который имеет наименьшее количество профилей, связанных с ним, и в случае дублирования вернуть один из них,Или лучше сказать, если exp является экземпляром Expiration, я ищу exp с наименьшим exp.profile_set.count()

У кого-нибудь есть идеи?

1 Ответ

6 голосов
/ 18 марта 2012

Аннотировать ваш запрос установлен с количеством профилей для каждого срока действия.Затем закажите по аннотированному полю.Профиль с наименьшим (или совместным наименьшим) профилем является первым результатом набора запросов.

Собрав все это вместе, вы получите:

from django.db.models import Count

Expiration.objects.annotate(num_profiles=Count('profile')).order_by('num_profiles')[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...