2011-06-24 12 views
0

私は自分のデータを入力して写真をアップロードできるテンプレートを用意しています。写真のアップロードはajaxを使用して行われ、フォーム内に別のアップロードボタンがあります。私の質問は、ユーザーがアップロードボタンをクリックしたときに写真をアップロードし、ユーザーが送信ボタンをクリックしたときにユーザー情報を保存する方法です。django image upload help

class User(models.Model): 
    name = models.CharField(max_length=50) 
    # some other fields 
    image = models.ImageField(upload_to="assets/images") 

ありがとう:

モデルは次のようになります!

+0

フォームを送信し、ビューに有効であれば保存してください。すべてがdbに保存されます。エラーが発生しているのか、それとも何が問題なのですか? – Luke

+0

いいえ、私はエラーを取得していません。写真のアップロードプロセスは、フォーム全体を提出することとは別のものです。最初に写真をアップロードし、ユーザーが送信をクリックすると、フォームを保存する必要があります。 –

+0

ajaxを使用して画像をアップロードする理由がありますか?あなたがDjangoのImageFieldを使用していて、ユーザーがアップロードするパスを選択して他の情報を入力して送信した場合は、すべて保存してからページに表示する必要があります。 – Luke

答えて

0

jsコールバック/成功関数の一部として画像を保存するために使用したUserインスタンスのIDを返し、隠しフィールドを設定してそのユーザーインスタンスを呼び出し、残りの情報を保存することができますユーザーがフォームを送信すると

さらに大きな問題は、とにかくユーザーがフォームを提出しようとしている場合、なぜイメージを先に保存したいのですか?

+0

ありがとう、しかし、私はいくつかのフィールドが必要であることを言及することを忘れてしまった。モデルですべての必須フィールドを証明する必要がある場合は、最初に画像を保存するにはどうすればよいですか?あなたの質問については、それは私が構築しているサイトの要件です。 –

+0

を参照してください。これを行うには2つの方法があります。プレースホルダデータを使用してUserインスタンスを作成することができます。これは、ユーザーがフォームを送信すると上書きする予定であることがわかっているためですフォームを送信しないでください。もう1つの選択肢は、画像をアップロードして保存し、画像のIDを返し、フォームが送信されたときに新しいUserインスタンスを保存するときに使用できる新しいImageモデルクラスを作成することです。私はオプション2が実際には最高に機能するかもしれないと思う。 –

+0

はクールですが、アップロードされたが決してプロファイルに結びついたことのないすべての写真はどうなりますか?それらの写真を追跡したり、しばらくしてから削除する方法はありますか? –

0

アップロードを処理するには、JavaScriptイベントハンドラで<input type="button" />を使用する必要があります。 jQueryの$ .POSTはこれを非常に簡単に行うことができます。

画像のアップロードに<input type="submit" />を使用すると、その画像を含むフォームも送信されます。

おそらくなど、実際に無効にAjaxの処理が完了していると、そのレコードが保存されるまで、あなたのフォームから他のデータへの関連付けを行うために必要がある場合には、ボタンを「保存」することになるでしょう

あなたが行くことを望みます。

+0

返信ありがとうございます。写真を最初に(多分、tmpディレクトリに)アップロードしてから、送信時にユーザー情報をアップロードできるように、ビューの設定に問題があります。 –

+1

ようこそ。私はおそらくビューのロジックをより簡単に保つために別のURL /ビューにアップロードポストを指し示すだろう。 – Brandon