1

リストを値として返したいカスタムウィジェットを書いています。返される値を設定するために見つけたものから、カスタム 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': None} の代わりに [ が出力されます。

リストが文字列に変換されないようにするにはどうすればよいですか?

ありがとう

4

1 に答える 1

2

簡単です: がある場合CharField、結果として文字列が得られます。これは、結果を文字列に強制CharFieldする method を使用するためです。to_pythonこのために独自のものを作成しField、リストを返す必要があります。

次の結果を投稿していただけますか。

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

正確には何が返されるのでしょうか。

また、例を提供するために使用しているテスト ケース全体を投稿していただけますか?

于 2010-02-24T12:12:58.027 に答える