sql >> Databasteknik >  >> RDS >> PostgreSQL

Django:NotImplementedError:annotate() + distinct(fields) implementeras inte

Prova detta:

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

Om question har inga answers , sedan question.is_user_agreed är None . Om question har minst ett answers med answer.is_agreed=True , sedan question.is_agreed är True . Annars is_user_agreed är False .

Eller det här:

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 är en lista över id av questions , som har minst ett answers med answer.is_agreed=True .




  1. Utveckla PostgreSQL för Windows, del 1

  2. Mysql-rekursion?

  3. Sök i alla kolumner i en tabell med ett enda where-villkor med ett enda nyckelord i mysql

  4. Skapa en oföränderlig klon av concat_ws