1

新しいユーザーを登録するための拡張UserProfileがあります。私のuser_created関数は、基本的なUserインスタンスの登録時に送信されるシグナルに接続し、フォームの拡張フィールドを使用して新しい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...)、data[]からデータを取得することはできません。

代替テキストhttp://img38.imageshack.us/img38/3839/61289917.png 通常の変数が「data」内にある場合、どこでファイルを探す必要がありますか?それとも問題はもっと複雑ですか?奇妙なことに、私のフォームには、cleaned_data属性がありません...ここでdmitkoのメソッドを使用していました:http ://dmitko.ru/?p = 546&lang=en 。私の:
フォーム: http: //paste.pocoo.org/show/230754/
モデル: http: //paste.pocoo.org/show/230755/

4

2 に答える 2

3

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

フォームの「data」属性は、最初の初期化引数(この場合はrequest.POST)として渡したものになり、ファイルは「files」属性(2番目の引数として渡したもの)に個別に保存されます。この場合、request.FILES)。フォームの「データ」または「ファイル」属性に直接アクセスすることは望ましくありません。アクセスする場合は、リクエストから直接データを読み取るだけであり、フォームを使用してもメリットはありません。

于 2010-06-28T03:16:47.253 に答える
0

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

于 2010-06-29T15:56:14.620 に答える