在django中,将自定义窗口小部件返回列表作为值而不是字符串

时间:2010-02-24 11:16:45

标签: django django-forms django-widget

我正在编写一个自定义小部件,我希望将列表作为值返回。从我可以找到设置返回的值,您创建一个自定义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 [0]它将打印出[而不是{'id':'1625','uuid':无}

如何阻止它将我的列表转换为字符串?

由于

1 个答案:

答案 0 :(得分:2)

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

<强> OLD

你能发布以下结果:

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

所以我们可以看到,究竟是什么返回?

您是否可以发布用于提供示例的整个测试用例?