Python Django:AttributeError:';Q';对象没有属性';计数';
我试图统计所有与会者的人数。我为循环和查询集创建了以下Python Django:AttributeError:';Q';对象没有属性';计数';,python,django,Python,Django,我试图统计所有与会者的人数。我为循环和查询集创建了以下。但是,我总是得到错误AttributeError:'Q'对象没有属性'count'。你有办法解决这个问题吗 # Get count of attendees per ticket and then combine these tickets = Ticket.objects.filter(event=3) count = 0 for ticket in tickets: new_count = ticket.attendees.fi
。但是,我总是得到错误AttributeError:'Q'对象没有属性'count'
。你有办法解决这个问题吗
# Get count of attendees per ticket and then combine these
tickets = Ticket.objects.filter(event=3)
count = 0
for ticket in tickets:
new_count = ticket.attendees.filter=Q(
canceled=False,
order__status__in=(
OrderStatus.PAID,
OrderStatus.PENDING,
OrderStatus.PARTIALLY_REFUNDED,
OrderStatus.FREE,
),
).count()
count += new_count
print(count)
您分配给.filter
:注意您编写了.filter=Q(
),而不是.filter(Q(…)
您可以通过以下方法解决此问题:
tickets = Ticket.objects.filter(event=3)
count = 0
for ticket in tickets:
new_count = ticket.attendees.filter(
canceled=False,
order__status__in=(
OrderStatus.PAID,
OrderStatus.PENDING,
OrderStatus.PARTIALLY_REFUNDED,
OrderStatus.FREE,
)
).count()
count += new_count
print(count)
tickets=Ticket.objects.filter(事件=3)
计数=0
车票中的车票:
新建计数=ticket.attendes.filter(
取消=错误,
订单状态=(
OrderStatus.PAID,
OrderStatus.PENDING,
订单状态。部分退款,
OrderStatus.FREE,
)
).count()
计数+=新计数
打印(计数)
话虽如此,我认为您只需打一个电话就可以更有效地处理此问题,如下所示:
Attendee.objects.filter(
ticket__event=3,
canceled=False,
order__status__in=(
OrderStatus.PAID,
OrderStatus.PENDING,
OrderStatus.PARTIALLY_REFUNDED,
OrderStatus.FREE,
)
).count()
Attendee.objects.filter(
票证事件=3,
取消=错误,
订单状态=(
OrderStatus.PAID,
OrderStatus.PENDING,
订单状态。部分退款,
OrderStatus.FREE,
)
).count()
因此,在这里,我们为事件=3
计算持有票证的与会者的人数。这可能比进行n次查询更有效。您分配给.filter
:请注意,您编写了.filter=Q(
),而不是.filter(Q(…)
您可以通过以下方法解决此问题:
tickets = Ticket.objects.filter(event=3)
count = 0
for ticket in tickets:
new_count = ticket.attendees.filter(
canceled=False,
order__status__in=(
OrderStatus.PAID,
OrderStatus.PENDING,
OrderStatus.PARTIALLY_REFUNDED,
OrderStatus.FREE,
)
).count()
count += new_count
print(count)
tickets=Ticket.objects.filter(事件=3)
计数=0
车票中的车票:
新建计数=ticket.attendes.filter(
取消=错误,
订单状态=(
OrderStatus.PAID,
OrderStatus.PENDING,
订单状态。部分退款,
OrderStatus.FREE,
)
).count()
计数+=新计数
打印(计数)
话虽如此,我认为您只需打一个电话就可以更有效地处理此问题,如下所示:
Attendee.objects.filter(
ticket__event=3,
canceled=False,
order__status__in=(
OrderStatus.PAID,
OrderStatus.PENDING,
OrderStatus.PARTIALLY_REFUNDED,
OrderStatus.FREE,
)
).count()
Attendee.objects.filter(
票证事件=3,
取消=错误,
订单状态=(
OrderStatus.PAID,
OrderStatus.PENDING,
订单状态。部分退款,
OrderStatus.FREE,
)
).count()
因此,在这里,我们为event=3
计算拥有ticket
的与会者的数量。这可能比进行n次查询更有效。正确的语法是:…attendes.filter(Q(…).count()
。没有额外的=
。这样count()是在Queryset
上调用的,而不是Q
对象。谢谢!另外,似乎根本不需要Q
。@Joey Coder:不,通常只有当您想写逻辑or,或者当您想作为对象传递过滤器(例如作为参数等)时才需要Q
正确的语法应该是:…attenders.filter(Q(…).count()
。那里没有额外的=
。这样count()是在Queryset
上调用的,而不是Q
对象。谢谢!另外,似乎根本不需要Q
。@Joey Coder:不,通常只有当您想写逻辑or,或者当您想作为对象传递过滤器(例如作为参数等)时才需要Q