質問

新しいユーザーを登録するための拡張ユーザープロファイルがあります。私のuser_created関数は、基本的なユーザーインスタンスを登録すると送信された信号に接続し、私のフォームから拡張フィールドを使用して新しいuserprofileを作成します。これがコードです:

from registration.signals import user_registered
from accounts.forms import ExtendedRegistrationForm
import accounts
from accounts.models import UserProfile

def user_created(sender, user, request, **kwargs):
    form = ExtendedRegistrationForm(request.POST, request.FILES)
    data = UserProfile(user=user)
    data.is_active = False
    data.first_name = form.data['first_name']
    data.last_name = form.data['last_name']
    data.pid = form.data['pid']
    data.image = form.data['image']
    data.street = form.data['street']
    data.number = form.data['number']
    data.code = form.data['code']
    data.city = form.data['city']
    data.save()

user_registered.connect(user_created)

問題は、このフォームにアバター用の画像フィールドがあることです。コードからわかるように、フォームのデータリストからデータを取得しています。しかし、どうやらImageFieldはPOSTリクエストでデータを送信しません(私が取得しているように MultiValueDictKeyError at /user/register/, Key 'image' not found in <QueryDict...)したがって、データから取得できません[]。

Alt Text http://img38.imageshack.us/img38/3839/61289917.png通常の変数が「データ」内にある場合、どこでファイルを探す必要がありますか?または、問題はより複雑ですか?奇妙なことは、私のフォームには属性cleaned_dataがないということです...私はここでdmitkoの方法を使用していました: http://dmitko.ru/?p=546&lang=en 。私の :
フォーム: http://paste.pocoo.org/show/230754/
モデル: http://paste.pocoo.org/show/230755/

役に立ちましたか?

解決

使用する前にフォームを検証する必要があります。これにより、慣れている「cleaned_data」属性が作成されます。 form.is_valid()を確認するだけで、「cleaned_data」属性が利用可能になり、ファイルが含まれている必要があります。

フォームの「データ」属性は、最初の無効化引数(この場合はrequest.post)として渡されたものは何でも、ファイルは「ファイル」属性(2番目の引数として渡すものは何でも、この場合、request.files)。フォームの「データ」または「ファイル」属性に直接アクセスすることは望ましくありません。そうすると、リクエストから直接データを読んで、フォームの使用から利益を得ることができません。

他のヒント

確かに <form enctype="..."> 属性が設定されています multipart/form-data ?それ以外の場合、ブラウザはファイルデータをアップロードできません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top