Проходим через фильтр, который я использовал для select_related
Это моя модель для покупки:
class Purchase(models.Model):
amount = models.FloatField(default=1)
entry_by = models.ForeignKey(
User,
on_delete=models.SET_NULL,
related_name='ledger_entry_by',
)
is_cash = models.BooleanField(default=False)
, а это моя модель потребления:
class Consume(models.Model):
amount = models.FloatField(default=1)
consumed_by = models.ForeignKey(
User,
on_delete=models.SET_NULL,
related_name='consume_entry_for',
)
Это мой запрос
user_wise_cost = User.objects.annotate(
difference=ExpressionWrapper(
Coalesce(Sum('ledger_entry_by__amount'), Value(0)) - Coalesce(Sum('consume_entry_for__amount'), Value(0)),
output_field=FloatField()
)
)
Вышеупомянутый запрос отлично работает в соответствии с моими требованиями.
Я хочу рассчитать только ту сумму, которую cash
заплатил, я имею в виду, если запись is_cash=True
, она будет рассчитана
Мое требование было:
например, пользователь купил 500 долларов США и потребил 550 долларов США, то есть , ему нужно заплатить еще 50 долларов, другой пользователь купил 440 долларов, но он израсходовал 400 долларов, то есть он получит возмещение в размере 40 долларов. Другой пример пользователя: пользователь ничего не покупал, но потратил 300 долларов, поэтому ему нужно заплатить 300 долларов. также, если пользователь ничего не покупал и не потреблял, но его данные должны отображаться как 0.
Прежде всего, требование было успешно выполнено этим запросом, нет никаких проблем, кроме в настоящее время он вычисляет как cash
, так и due
количество, но я хочу, чтобы было рассчитано только около sh количество.
для этого, я отфильтровал его следующим образом:
user_wise_cost = User.objects.annotate(
difference=ExpressionWrapper(
Coalesce(Sum('ledger_entry_by__amount'), Value(0)) - Coalesce(Sum('consume_entry_for__number_of_meal'), Value(0)),
output_field=FloatField()
)
).filter(
ledger_entry_by__is_cash=True
)
, и проблема состоит в том, что если пользователь ничего не покупает или не потребляет, его данные не отображаются.
Может ли кто-нибудь помочь мне рассчитать только приблизительную sh сумму?