我觉得这是一个非常简单/愚蠢的问题,但是对于我的一生,我无法弄清楚。我正在尝试从查询集中提取一个整数,以便可以将其与数学运算符一起使用。我所能得到的只是查询集,而不是实际的号码...
:FacePalm:
var mytext = 'Hello :smile: and jolly :wave:';
var matches = mytext.match(/:([a-z0-9]+):/gmi);
// matches = [':smile:', ':wave:'];
如何从查询集中获取实际数字,以便可以使用?
编辑:我对我实际上想使用Max()函数做的事情更加清楚。相同帐户名称的多个对象可以具有不同的帐号。我想要该列表中的最大数量,然后向其中添加一个。
答案 0 :(得分:1)
请记住,一个QuerySet可能包含多个结果。如果确定只需要第一个contract_number
,请按索引0访问它:
number = Contract.objects.filter(account="xyz").values_list('contract_number', flat=True)[0]
答案 1 :(得分:1)
您可以使用方法first
并获得attr contract_number
Contract.objects.filter(account="xyz").order_by('contract_number').first().contract_number + 1
并排除未找到Contract
的异常,您可以这样做:
contract = Contract.objects.filter(account="xyz").order_by('contract_number').first()
contract_number = contract.contract_number + 1 if contract else 1
阅读文档querysets first
或简单地使用aggregation中的Max
from django.db.models import Max
max_agg = Contract.objects.filter(account="xyz").aggregate(max_num=Max('contract_number'))
contract_number = max_agg.get('max_num', 1)
答案 2 :(得分:1)
基于修订后的问题的另一个答案:
next_contract_number = (
Contract.objects.filter(account="xyz") # Filter like usual...
.aggregate(num=Max("contract_number")) # Create an aggregation, so we get a dict out . . .
.get("num") # ... that we get `num` (the kwarg from above) out; but it may be None, so ...
or 0 # ... use the fact that `None` is falsy to default to zero . . .
) + 1 # and add one.