Django Aggregate Max没有为CharField

时间:2017-07-12 13:41:31

标签: python django django-models

我有这个查询给我DB的下一个可用密钥。它工作得很好,直到达到10,当它不是

时会说10可用
max_var = ShortUrl.objects.filter(is_custom=False).aggregate(max=Cast(Coalesce(Max('key'), 0),BigIntegerField()))['max'] + 1

该列是CharField。

有关如何解决此问题的任何提示?

1 个答案:

答案 0 :(得分:0)

您需要先注释(将字符串强制转换为int)。然后,您可以找到投放价值的汇总。即:

from django.db.models import BigIntegerField
from django.db.models.functions import Cast
from django.db.models import Max

max_var = ShortUrl.objects.filter(is_custom=False) \
    .annotate(key_int = Cast('key', output_field=BigIntegerField())) \
    .aggregate(max=Max('key_int'))['max'] or 0

max_var+=1