2016-10-06 16 views
1

私は本当に奇妙なデータベースエラーを取得しています(ただし、はMAX_LENGTH限度内にあることが表示されます)私の調査アプリ。奇妙なことは:私はそのフィールドに4文字を保存しようとしていると信じています!ジャンゴあまりにも様々な種類の文字の長い値

.save(update_fields=['question_type', 'question_text', 'quota'])呼び出しはのModelFormの検証に合格したので、私はそれが実際にモデルにマッチしたかどうかを確認するために私のデシベルに行き、それがない:

db=# \d surveyapp_question; 
     Table "public.surveyapp_question" 
    Column  |   Type   | Modifiers 
---------------+------------------------+----------- 
uuid   | uuid     | not null 
question_type | character varying(4) | not null 
question_text | character varying(255) | 
order   | integer    | 
quota   | smallint    | 

あなたが見ることができるように、一つだけvarchar(4)がモデルにあります。 question_type。その列に保存しようとしている値は "text"です。 POSTデータには「テキスト」が表示されます。 をform_validに入れた場合はtextと表示されます。

だから私はpostgresのを見ては、ログ:

tail -f /var/log/postgresql/postgresql-9.4-main.log 
... 
UPDATE "surveyapp_question" SET "question_type" = '(''text'',)' WHERE... 

をすっごく...それは右見ていないのですか? 「''text''」とは何ですか?なぜそのタプルに"text"がないのですか?それがエラーの原因ですか?

私はdjango 1.10、psycopg2 2.6.2、PostgreSQL 9.4.7を実行しています。

self.question.some_property = form.cleaned_data['some_property'], 

私は偶然末尾のカンマを付加し、それが何らかの形で私の特定のコードの構文エラーは発生しませんでしたが、危険なクエリとしてデータベースに右psycopg2を経て:

+0

フォームを表示し、表示し、モデル化できますか? –

+0

Timmyを提案してくれてありがとう - 私は公衆の見解のために 'view'をサニタイズしていたときに、' self 'のプロパティを設定していた行に後続のカンマが追加されていることに気づいた。どのように地球上でdodgy SQLに変換される私の外です! – Escher

答えて

1

その際。それはおそらく他の誰にも起こりえない本当にあいまいなエラーですが、デバッグ手順が人にとって有益な場合には質問を残しておきます。

+2

FYI、 'form.cleaned_data ['...']'は文字列なので、フォームフィールド(とモデル)にタプルを作成した後に '、'を入れます。インタプリタで 's =" hello "、'を試してみると、私の言いたいことが分かります。このタプルは文字列にキャストされてDBに保存されます –

+0

うわー、その説明に感謝!あなたがかっこなしのタプルを宣言できることは分かりませんでした。 – Escher

関連する問題