【问题标题】:Django Concat columns with integers and strings带有整数和字符串的 Django Concat 列
【发布时间】:2019-04-16 07:31:14
【问题描述】:

我在尝试在查询中将两个不同列中的值相加时遇到了一个问题,即其中一些包含数字。这意味着内置的Concat 不起作用,因为它需要字符串或字符。

考虑到如何在 SQL 中将变量转换为其他数据类型,我不明白为什么我不能在 Django 中做到这一点。

cast(name as varchar(100))

我假设有人会在 Django 中使用 Concat 函数结合Cast 来执行以下操作。

queryset.annotate(new_col=Concat('existing_text_col', Cast('existing_integer_col', TextField())).get())

以上显然行不通,那么有谁知道如何实际做到这一点?

如果有人想知道将 jenkins url 作为一个整体保存为片段的用例。所以一个网址是:

base_url: www.something.com/
url_fragment: name/
url_number: 123456

【问题讨论】:

  • 有什么理由在 SQL 中而不是直接在 Django 中执行此操作?即os.path.join(item.base_url, item.url_fragment, str(item.url_number))?
  • 安装框架后没有理由在 SQL 中执行此操作。对不起,如果我奇怪地写了我的问题。我只是在 SQL 中给出了一个示例,因为我比 Django 更熟悉它。我不认识 os.path 所以我必须调查一下,但也许这正是我需要的@DanielRoseman

标签: sql django


【解决方案1】:

我最终编写了一个从包含 url 片段和许多其他内容的基本序列化程序继承的序列化程序。在其中,我为完整的 url 创建了一个 MethodField 并定义了一个 getter 函数,该函数加载到不同的片段中并将它们添加到一起。我还将碎片化的字段重新声明为 None。

新的序列化器里面的代码是:

complete = serpy.MethodField("get_copmlete")

serverUrl = serpy.Field(attr=None, call=False, required=False)
jobName = serpy.Field(attr=None, call=False, required=False)
buildNumber = serpy.Field(attr=None, call=False, required=False)

def get_complete(self, obj):
    return obj.server_url + obj.job_name + '/' + str(obj.build_number)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-25
    • 2015-12-14
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 2018-02-02
    • 1970-01-01
    相关资源
    最近更新 更多