PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Django:NotImplementedError:annotate() + distinct(fields) не е внедрен

Опитайте това:

Question.objects.annotate(
    answer_amount=Count('answers'),
    is_user_agreed=F('answers__is_agreed'),
).order_by('id', '-answers__is_agreed').distinct('id')

Ако question няма answers , след това question.is_user_agreed е None . Ако question има поне един answer с answer.is_agreed=True , след това question.is_agreed е True . В противен случай is_user_agreed е False .

Или това:

agreed_questons = Answer.objects.filter(
    is_agreed=True,
).values_list('question_id', flat=True).distinct()

Question.objects.annotate(
    answer_amount=Count('answers'),
    is_agreed=Case(
        When(id__in=agreed_questions, then=True),
        When(answers__isnull=True, then=None),
        default=False,
        output_field=NullBooleanField(),
    ),
)

agreed_questons е списък с id от questions , които имат поне един answer с answer.is_agreed=True .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Избиране на всички записи, ако записът има някой от идентификаторите от масив

  2. Извличане на стойност на xml таг в PostgreSQL

  3. За какво се използва конструктор на ред?

  4. Postgresql base64 кодиране

  5. Бърза заявка за нормализиране на SQL данни