0

djangoトランクr13359とdjangoピストンを使用して、文字列値を格納する小さなRESTfulサービスを作成しました。

これは、文字列を格納するために使用しているモデルです。

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-pistonハンドラーの一部としてストレージを処理するコードです。

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 adminから保存されたインスタンスを見ると、データフィールドに保存されている値は次のようになります。

(u'somedata',)

そして、以下はURLに保存されます:

('',)

さらに興味深いのは、curlを使用してサービスにクエリを実行し、何が保存されているかを確認すると、次のようになります。

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

私は困惑しています..何が起こっているのか考えていますか?

4

1 に答える 1

1

実際、あなたの反応も期待されるべきものではありません。文字列の周りの[]に注意してください、それらはそこにあるべきではありません。

エラーは、次の2行の後にコンマを追加することです。

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

Pythonは、タプルをurlとdataに格納することを解釈し、djangoはそれらのタプルを暗黙的に文字列に変換するため、表示される動作が得られます。2つのコンマを削除するだけで、問題ありません。

于 2010-06-19T11:59:55.767 に答える