Имеются связанные модели, предположим модель товара у которого есть покупатель.
class Customer(models.Model):
...
class Product(models.Model):
customer = models.ForeignKey(Customer, related_name='customer')
date_sell = models.DateField(...)
Я хочу для каждого товара купленного пользователем определить, покупал ли этот пользователь товары ранее. Для этого я выполняю аннотацию дважды, сначала подсчитываю предыдущие покупки, а затем в зависимости от результата добавляю вторую аннотацию.
Product.objects.annotate(
prev_purchase_count=Count(
'customer__product__id',
filter=Q(
customer__product__date_start__lte=F('date_start'),
) & ~Q(id=F('customer__product__id'))
),
).annotate(
purchase_type=Case(
When(prev_purchase_count=0, then=Value('Первая покупка')),
default=Value('Повторная покупка'),
output_field=TextField(),
)
)
Вопрос - есть ли более элегантный способ сделать это?