2016-03-19 4 views
1

ユーザーがプロファイルを作成すると、イメージは正常に保存されますが、プロファイルを更新すると保存されません。私はまた、それを更新する前にそれを見ることができるように写真を引っ張る方法を知らない。upload_toが機能しない

これは形式です:

def updateprofile(request): 



if request.method == 'POST': 
    update_user_form = UpdateUserForm(request.POST, instance=request.user) 
    update_profile_form = UpdateProfileForm(request.POST, request.FILES, instance=request.user.profile) 

if update_user_form.is_valid() and update_profile_form.is_valid(): 
    update_user_form.save() 

    '''************************************************''' 
    profile = update_profile_form.save(commit=False) 

    if 'profilepic' in request.FILES: 
     profile.profilepic = request.FILES['profilepic'] 

    profile.save() 

    '''************************************************''' 


    return HttpResponseRedirect(reverse('index')) 
else: 
    update_user_form = UpdateUserForm(instance=request.user) 
    update_profile_form = UpdateProfileForm(instance=request.user.profile) 


return render(request, 'updateprofile.html', {'update_user_form' : update_user_form, 'update_profile_form' : update_profile_form}) 

そして、これはモデルです::

class UpdateProfileForm(forms.ModelForm): 
    city = models.ForeignKey(City) 

    class Meta: 
     model = UserProfile 
     fields = ('city', 'profilepic') 

    def save(self, commit=True): 
     profile = super(UpdateProfileForm, self).save(commit=False) 

     if commit: 
      profile.save() 
     return profile 

これは図である

# this is model for user 
class UserProfile(models.Model): 
    user = models.OneToOneField(User, related_name='profile') 

    hobbies = models.ManyToManyField(Hobby) 
    languages = models.ManyToManyField(Language) 

    profilepic = models.ImageField(upload_to='static/images/Profile Pictures', blank=True) 
    city = models.ForeignKey(City) 
    slug = models.SlugField(unique=True) 

    average_rating = models.IntegerField(default=0) 
    ratings_count = models.IntegerField(default=0) 

    def save(self, *args, **kwargs): 
     # Uncomment if you don't want the slug to change every time the name changes 
     self.slug = slugify(self.user.username) 
     super(UserProfile, self).save(*args, **kwargs) 

    def __unicode__(self): 
     return self.user.username 

ありがとうございました。

+0

から

の指示に従って、私はあなたが 'Form'にすぎ' request.FILES'属性を渡す必要がありますね。 –

答えて

2

フォームにrequest.FILESを追加:デフォルトのジャンゴによって

update_profile_form = UpdateProfileForm(request.POST, request.FILES, 
             instance=request.user) 

はrequest.POSTまた

内のファイルが含まれていません、私はUserProfileモデルのインスタンスはrequest.user.profileの代わりrequest.userすべきだと思いますか私はここに何かを逃している? django-docs

+0

私は自分のアドバイスとdjangoのドキュメントごとに自分のコードを更新しました。何らかの理由でまだアップロードされていません。古い絵を新しいものに置き換えたい。さらに助言してもらえますか?どうもありがとうございます。 **** – Sei

+0

で編集を囲んだハイライト部分を追加する必要はありません。フォームが有効な場合は 'update_profile_form.save()'を呼び出してください。フォームはファイルを保存します(存在する場合)。また、2番目の 'if'ブロックは、最初の' if'ブロックの内側にインデントされているとうまく動作するはずです。 – v1k45

関連する問題