具有整数和字符串的Django Concat列

时间:2018-11-13 12:53:41

标签: sql django

我在尝试将两个不同列的值添加到查询中时遇到了一个问题,即其中一些包含数字。这意味着内置的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

1 个答案:

答案 0 :(得分:0)

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

新序列化器中的代码是:

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)