2016-03-19 7 views
1

Kullanıcılarım profil oluşturduğunda, görüntüleri iyi kaydediliyor ancak güncellendiğinde kaydedilmiyor. Ayrıca, pic'ı nasıl çekeceğini bilmiyorum, böylece onu güncellemeden önce görebilirler.upload_to çalışmıyor?

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 

Bu görünümdür:

Bu

şeklidir

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}) 

Ve bu modelidir:

# 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 

teşekkür ederiz.

+0

den

Takip talimatları Sana 'Form' çok' request.FILES' niteliğini geçmelidir sanırım. –

cevap

2

forma request.FILES ekleyin: Varsayılan django By

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

request.POST Ayrıca

dosyaları içerir gelmez, ben UserProfile modeli için örnek request.user.profile yerine request.user olması gerektiğini düşünüyorum veya Burada bir şey eksik miyim? django-docs

+0

Tavsiyem ve django belgesine göre kodumu güncelledim. ama nedense hala yüklemiyor. Eski resimle yenisini değiştirmek istiyorum. Daha fazla bilgi verir misiniz? çok teşekkür ederim. Düzenlememi **** – Sei

+0

ile çevreledim. Vurgulanan parçayı eklememize gerek yok. Form geçerliyse, sadece 'update_profile_form.save()' işlevini çağırın. Form dosyaları (varsa) kaydedecektir. Ayrıca, ikinci 'if 'bloğu, eğer ilk' if 'bloğu içinde girintilerse daha iyi çalışmalıdır. – v1k45