在Django表单自定义部件返回列表作为值,而不是字符串(In django forms custo

2019-10-19 23:28发布

我书面方式,我想返回一个列表作为值自定义窗口小部件。 从我可以找到设置返回您创建一个自定义功能value_from_datadict值。 我这样做

def value_from_datadict(self, data, files, name):
    value = data.get(name, None)
    if value:
        # split the sting up so that we have a list of nodes
        tag_list = value.strip(',').split(',')
        retVal = []
        # loop through nodes
        for node in tag_list:
            # node string should be in the form: node_id-uuid
            strVal = str(node).split("-")

            uuid = strVal[-1]
            node_id = strVal[0]

            # create a tuple of node_id and uuid for node
            retVal.append({'id': node_id, 'uuid': uuid})

        if retVal:
            # if retVal is not empty. i.e. we have a list of nodes
            # return this. if it is empty then just return whatever is in data
            return retVal

    return value

我希望这个返回一个列表,但是当我打印出来的值,则返回一个字符串,而不是一个列表。 该字符串包含正确的文本,但正如我所说的它是一个字符串,而不是一个列表。 的返回什么的例子可能是

[{'id': '1625', 'uuid': None}]

可是如果我不STR [1 0],将打印出[代替{“身份证”:“1625”,“UUID”:无}

我怎样才能从我的列表转换成字符串阻止它?

谢谢

Answer 1:

嗯,这很简单:如果你有一个CharField ,那么你会得到一个字符串作为一个结果,因为CharField使用方法to_python ,它可以强制将结果字符串。 您需要创建自己的Field为这一个,并返回一个列表。

你能后的结果:

x = value_from_datadict(..)
print type(x)

因此我们可以看到,到底是返回什么?

可你发布你正在使用提供例子中,整个测试案例?



文章来源: In django forms custom widget return list as value instead of string