5

次のモデルをモデル フォームでアップロードできません。管理者で問題なくアップロードできますが、管理者アクセスを制限するプロジェクトにはそれほど役に立ちません。

#Models.py
class Profile(models.Model):
    name = models.CharField(max_length=128)
    user = models.ForeignKey(User)
    profile_pic = models.ImageField(upload_to='img/profile/%Y/%m/')

#views.py
def create_profile(request):
    try: 
        profile = Profile.objects.get(user=request.user)
    except:
        pass
    form = CreateProfileForm(request.POST or None, instance=profile)

    if form.is_valid():
       new = form.save(commit=False)
       new.user = request.user
       new.save()

return render_to_response('profile.html', locals(), context_instance=RequestContext(request))


#Profile.html
<form enctype="multipart/form-data" method="post">{% csrf_token %}
<tr><td>{{ form.as_p }}</td></tr>
<tr><td><button type="submit" class="btn">Submit</button></td></tr>
</form>

注: フォーム内の他のすべてのデータは問題なく保存されますが、写真はまったくアップロードされません。ご協力ありがとうございました!

4

4 に答える 4

8

フォームに渡す必要がありrequest.FILESます。

form = CreateProfileForm(request.POST, request.FILES, instance=profile)

参照:モデルでアップロードされたファイルを処理する

于 2012-10-30T22:57:48.953 に答える
1

モデル インスタンスを保存する前にこれを追加します。

 new.profile_pic = request.FILES.get('profile_pic')
于 2015-03-04T13:45:13.093 に答える
1

私はそれを考え出した。私のviews.pyの問題でした。request.method == POST を設定して、フォームの一部としてインスタンスを保持できるようにする必要があります。しかし、完璧に動作します。

#Views.py

def create_profile(request):
    try: 
        profile = Profile.objects.get(user=request.user)
    except:
        pass
if request.method == 'POST':
    form = CreateProfileForm(request.POST, request.FILES)

    if form.is_valid():
       new = form.save(commit=False)
       new.user = profile.user
       new.save()

else:
     form = CreateProfileForm(request.POST or None, instance=profile)


return render_to_response('profile.html', locals(), context_instance=RequestContext(request))
于 2012-10-31T19:28:21.757 に答える