В django формы настраиваемого виджета возвращают список в виде значения вместо строки - PullRequest
1 голос
/ 24 февраля 2010

Я пишу пользовательский виджет, который я хочу вернуть список в качестве значения. Из того, что я могу найти, чтобы установить возвращаемое значение, вы создаете пользовательскую функцию 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}

Как мне остановить преобразование моего списка в строку?

Спасибо

1 Ответ

2 голосов
/ 24 февраля 2010

Ну, это просто: если у вас есть CharField, вы получите строку в результате, потому что CharField использует метод to_python, который приводит результат к строке. Вам нужно создать свой собственный Field для этого и вернуть список.

OLD

Не могли бы вы опубликовать результат:

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

чтобы мы могли видеть, что именно возвращается?

А не могли бы вы опубликовать весь тестовый пример, который вы используете для доставки примера?

...