Следующий запрос выполняет то, что я хотел бы, однако я понятия не имею, насколько он эффективен. Я просмотрел документацию по Django , бросил ее вместе, посмотрел на запрос и наклонил голову, как сбитая с толку собака.
Что на самом деле делает запрос, так это публикует записи "name" и "name_slug", которые имеют один или несколько утвержденных комментариев, и упорядочивает результаты по полю последнего комментария "date_published". Результаты представляют собой список недавно активных записей.
Итак, несколько вопросов. (1) Есть ли что-то, что вы видите в запросе, это просто нет-нет. (2) Есть ли способ увидеть RAW SQL, который запрашивает базу данных?
Модель:
class Entry(models.Model):
name = models.CharField(max_length=200, unique=True)
name_slug = models.SlugField(max_length=200, blank=True, editable=False, unique=True)
date_published = models.DateTimeField()
is_published = models.BooleanField(default=False)
class Comment(models.Model):
entry = models.ForeignKey('Entry')
date_published = models.DateTimeField()
approved_choices = (('N', 'No'), ('Y', 'Yes'), ('M', 'Needs Moderation'),)
approved = models.CharField(max_length=1, choices=approved_choices, default='N')
Запрос:
active_entry_list = Entry.objects
.values('name', 'name_slug')
.filter(is_published=True, comment__approved='Y')
.annotate(latest_comment=Max('comment__date_published'),comments=Count('comment'))
.filter(comments__gte=1)
.order_by('-latest_comment')
[:6]