PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Django:NotImplementedError:annotate() + differ(fields) nie jest zaimplementowany

Spróbuj tego:

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

Jeśli question nie ma answers , a następnie question.is_user_agreed to None . Jeśli question ma co najmniej jedną answer z answer.is_agreed=True , a następnie question.is_agreed jest True . W przeciwnym razie is_user_agreed jest False .

Albo to:

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 to lista id questions , które mają co najmniej jedną answer z 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. Liczba całkowita poza zakresem w Postgres DB

  2. Funkcje okien i bardziej lokalna agregacja

  3. PostgreSQL ORDER BY wartości w klauzuli IN()

  4. Postgres wstawia lub aktualizuje wyzwalacz WHEN (stary)

  5. Dystrybuowane przez wiele kolumn