【问题标题】:Django Casting Character as Integer QueryDjango 将字符转换为整数查询
【发布时间】:2016-01-14 08:35:54
【问题描述】:

我有一个类似于以下模型的简单模型:

class ServiceIncoice(MyCustomRegistrationModel):
    (...)
    number = models.CharField(max_length=60)
    (...)

字段编号通常包含整数值。用户可能只想使用数字或字母数字代码。

问题是当用户想要创建一个新的 ServiceInvoice 实例时,我需要获取字段编号的最后一个值,然后在最后一个值上加 1。例如:

  1. Id = 1,数字 = 13
  2. Id = 2,编号 = 2
  3. ID = 3,数字 = 16

下一项应该有 Id = 4 和 Number = 17。但是当我执行时

ServiceInvoice.objects.all().latest('number')

它返回 2 这不是我想要的。我试过this solutionthis onethis one。他们中的任何人都为我工作,因为我需要任何给定 ServiceInvoice 的数量最多。

提前致谢。

【问题讨论】:

  • 感谢您为我指明正确的方向。第一个解决方案就是我需要的解决方案。
  • 嗨@meshantz 很高兴为您提供帮助。您可以考虑将其标记为有用的答案吗?干杯。
  • 我对这个问题投了赞成票。您尚未选择首选答案,也无法为自己的答案投票 :)

标签: django postgresql


【解决方案1】:

根据 django 文档。

Latest 使用作为日期字段提供的 field_name 按日期返回表中的最新对象。

你可以的

qs = ServiceInvoice.objects.all().order_by('-number')[:1]

【讨论】:

  • 我尝试了您的解决方案@Rizwan,但结果相同。我想我需要将数字转换为整数,因为它存储为 char 字段(数字 = models.CharField)。在 char 字段中,顺序类似于 1、11、111、...、2、21、211 等。谢谢。
【解决方案2】:

您引用的first solution 应该可以工作,只要您在额外调用中更新转换以适用于您的数据库实现。对于 postgresql,这应该如下所示:

ServiceInvoice.objects.extra(
    {'number_as_int': "number::INTEGER"}
).latest('number_as_int')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2023-03-11
    • 2016-02-05
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    相关资源
    最近更新 更多