python - Django:创建查询集?
问题描述
我试图得到以下结果<EventQuerySet [{4: 10000, 5: 20000, [...]}]>
。
“获得”的方式有以下工作流程:
1) 获取组织者的每个活跃事件
def organizers(self):
return self.request.user.organizers
Event.objects.filter(
organizer__in=self.organizers,
status=EventStatus.LIVE
)
2) 对于每个事件 > 获取属于该特定事件的所有门票。特别是,我需要访问每张票的数量和价格
3) 获取已售出的门票数量
.annotate(
sold_tickets=Count('attendees', filter=Q(attendees__canceled=False))
)
.order_by('organizer')
4) 现在我们有了计算max_remaining_gross_sale
每个事件所需的所有信息:
例子:
PK 4 事件
门票 1:price_gross *(数量 - sold_tickets)
门票 2:price_gross *(数量 - sold_tickets)
PK 5 事件
门票 1:price_gross *(数量 - sold_tickets)
[...]
5)从每个事件的所有门票中,我们建立总和并得到以下结果:
<EventQuerySet [{4: 10000, 5: 20000, [...]}]>
我没有设法以一种可以给我 5) 的结果的方式构建该 QuerySet。你对我有什么建议吗?
这是我的相关领域的模型:
class Ticket(TimeStampedModel):
quantity = models.PositiveIntegerField(
verbose_name=_("Quantity"),
validators=[MinValueValidator(1), MaxValueValidator(100_000)],
)
status = models.CharField(
max_length=8,
choices=TicketStatus.CHOICES,
default=TicketStatus.ON_SALE,
verbose_name=_("Status"),
)
price_gross = models.PositiveIntegerField(
verbose_name=_("Price gross"), help_text=_("Includes tax if you set any.")
)
class Event(TimeStampedModel):
status = models.CharField(
max_length=8,
choices=EventStatus.CHOICES,
default=EventStatus.LIVE,
verbose_name=_("Status"),
)
organizer = models.ForeignKey(
Organizer, on_delete=models.PROTECT, related_name='events'
)
class Attendee(TimeStampedModel):
ticket = models.ForeignKey(
Ticket, on_delete=models.PROTECT, related_name='attendees'
) # PROTECT = don't allow to delete the ticket if an attendee exists
event = models.ForeignKey(
Event, on_delete=models.PROTECT, related_name='attendees'
)
canceled = models.BooleanField(default=False, verbose_name=_("Canceled"))
解决方案
编辑:等一下 - 我忽略了你的取消过滤器
根据我建议的编辑,我认为这应该可行:
Event.objects.annotate(max_remaining_gross_sale=Sum(F('tickets__price_gross')*(F('tickets__quantity')-F('tickets__attendees')), output_field=FloatField())).values()
推荐阅读
- javascript - 选择 jQuery id 和类的问题
- c# - MS Excel - Epplus- 未读取主题颜色的 RGB 值
- php - 获取后无法使用 laravel 上传图片
- php - 开发自己的PHP MVC框架工作(如codeigniter)我们应该知道什么
- python - 使用 Python 或 Excel vba 将单个 excel 单元格内容拆分为不同的单元格
- python - 如何在python中将字典转换为矩阵?
- swift - SwiftUI:如何让 TextField 成为第一响应者?
- delphi - Delphi - 如何正确注册自 XE8 以来的图形类?
- python - 被熊猫读取后删除CSV文件中的行
- php - php文件大小重要吗?