необычное поведение администратора django при хранении строковых значений - PullRequest
0 голосов
/ 19 июня 2010

Используя ствол django r13359 и поршень django, я создал небольшой успокаивающий сервис, который хранит значения строк.

Это модель, которую я использую для хранения строк:

class DataStore(models.Model):
    data =  models.CharField(max_length=200)
    url = models.URLField(default = '', verify_exists=False, blank = True)

Я использовалcurl для публикации следующих данных:

curl -d "data=somedata" http://localhost:8000/api/datastorage/

Это код, который обрабатывает хранилище как часть обработчика django-поршня

store = DataStore()
store.url = request.POST.get('url',""),
store.data = request.POST['data'],
store.save()
return {'data':store}

Когда я публикую данные с помощью curl, я получаю следующееТело ответа, которое ожидается:

{
    "result": {
        "url": [
            ""
        ], 
        "data": [
            "somedata"
        ], 
        "id": 1
    }
}

Чего не ожидается, однако, когда я смотрю на сохраненный экземпляр от администратора django, значение, хранящееся в поле данных, выглядит примерно так:

(u'somedata',)

и в URL сохраняется следующее:

('',)

Что еще более интересно, когда я запрашиваю службу с помощью curl, чтобы посмотреть, что хранится, я получаю следующее:

{
    "result": {
        "url": [
            "('',)"
        ], 
        "data": [
            "(u'somedata',)"
        ], 
        "id": 1
    }
}

Я в замешательстве ... есть идеи, что может происходить?

1 Ответ

1 голос
/ 19 июня 2010

На самом деле ваш ответ также не соответствует ожидаемому, обратите внимание на [] вокруг ваших строк, их не должно быть.

Ваша ошибка - добавление запятой после этих двух строк:

store.url = request.POST.get('url',""),
store.data = request.POST['data'],

Python интерпретирует, что вы хотите сохранить кортеж в URL и данных, а django неявно преобразует эти кортежи в строки, что приводит к поведению, которое вы видите.Просто удалите две запятые, и все будет в порядке.

...