ORM内での条件分岐
sales_exists = Sales.objects.filter(name=OuterRef('pk')) person_model = Person.objects.annotate( has_sales=Case( When(Exists(sales_exists), then=Value('売り上げあり')), default=Value('売り上げなし'), ) ) print(person_model.values('name', 'has_sales'))
Case(
When(条件, then=条件に一致したときの値),
default=条件に一致しなかったときの値,
)
When(条件, then=条件に一致したときの値),
default=条件に一致しなかったときの値,
)
の形式で記入することでORM内で条件分岐を行うことができます。
When(条件, then=条件に一致したときの値)は,区切りで追加することもできます。
上の例では、自身に紐づいたSalesが1つでもあれば売り上げあり、なければ売り上げなしがhas_salesフィールドに代入されています。