Я следующих моделей: (. Я е где hasTopics
возвращает true
.)Джанго запрос с агрегатной функцией
class TopicLabel(models.Model):
name = models.CharField(max_length=256)
order = models.IntegerField(null=True, blank=True)
def __unicode__(self):
return self.name
def hasTopics():
return TopicLabelConnection.objects.filter(labelId=self.id).count() > 0
class TopicLabelConnection(models.Model):
topicId = models.ForeignKey(Topic, related_name='connection_topic')
labelId = models.ForeignKey(TopicLabel, related_name='connection_label')
def __unicode__(self):
return self.labelId.name + '/' + self.topicId.title
В определенной точки зрения, я хочу, чтобы создать список всех TopicLabel
с, которые имеют, по меньшей мере, одно соединение.
AFAIK в Django невозможно использовать методы экземпляра в выражениях filter
(то есть что-то вроде TopicLabel.objects.filter(TopicLabel.hasTopics).order_by('order')
невозможно).
Каков правильный способ (Django-style) для реализации такого запроса (желательно без базы данных)?
Не используйте 'count' для проверки существования. используйте 'queryset.exists()' insted. Это намного проще для вашей базы данных. 'count()' может быть вредным. – Pol
Теперь действительно ответ на ваш вопрос, но если ваша модель TopicLabelConnection существует только для подключения двух других моделей, то вы, вероятно, можете использовать поле Django ManyToMany и создать для вас таблицы и управлять таблицами. –