2016-06-08 2 views
1

Я сделал вид, чтобы обновить userprofile. При загрузке изображения изображение сохраняется правильно, но при повторном обновлении профиля изображение больше не сохраняется, как я могу решить эту проблему? Я рад за любую помощь!(Django) Обновляя UserProfile, изображение не сохраняется правильно

мой класс UserProfile выглядит следующим образом:

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    bio = models.TextField(max_length=500, blank = True, default=('keine Angabe'), null=True) 
    image = models.FileField(null=True, blank=True) 
    facebook = models.CharField(max_length=200, null=True,default=('keine Angabe')) 

    def get_absolute_url(self): 
     return reverse('gaestebuch:result', args=[str(self.id)]) 

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

    @property 
    def get_content_type(self): 
     instance = self 
     content_type = ContentType.objects.get_for_models(instance.__class__) 
     return content_type 

Я использую два вида:

def update_profile(request): 
    userProfile = UserProfile.objects.get(user=request.user) 
    form = UserProfileForm(initial={'bio': userProfile.bio, 'image' : userProfile.image, 'facebook': userProfile.facebook}) 
    return render_to_response('gaestebuch/update_profile.html', {'form':form}, RequestContext(request)) 


@login_required 
def send_update_profile(request): 
    if request.method == 'POST': 
     #form = UserProfileForm(request.POST) 
     form = UserProfileForm(request.POST or None, request.FILES or None) 
     if form.is_valid(): 
      userProfile = UserProfile.objects.get(user=request.user) 
      bio = form.cleaned_data['bio'] 
      userProfile.bio = bio 
      image = form.cleaned_data['image'] 
      userProfile.image = image 
      facebook = form.cleaned_data['facebook'] 
      userProfile.facebook = facebook 
     userProfile.save() 
     return redirect('the url' + str(userProfile.id)) 
    else: 
     form = UserProfileForm() 
    return redirect('/user/send_update_profile') 

Это моя форма:

class UserProfileForm(forms.ModelForm): 

    class Meta: 
     model = UserProfile 
     fields = ('bio','image','facebook',) 

Если есть что-нибудь еще нужно объявление , Я рад добавить это.

Я рад за любую помощь!

+0

Как выглядит ваша форма? – e4c5

+1

Извините, я просто добавил – Dannad

ответ

1

Поскольку вы используете ModelForm подкласса вместо формы подкласса вы должны использовать его функциональность, в частности save method.

Every ModelForm also has a save() method. This method creates and saves a database object from the data bound to the form. A subclass of ModelForm can accept an existing model instance as the keyword argument instance; if this is supplied, save() will update that instance. If it’s not supplied, save() will create a new instance of the specified model

Таким образом, ваш код ча быть упрощена

form = UserProfileForm(request.POST or None, request.FILES or None) 
if form.is_valid(): 
    form.save() 
    return redirect('the url' + str(userProfile.id)) 

else: 
    return render_to_response(
     'gaestebuch/update_profile.html', {'form':form}, RequestContext(request)) 

Об одном примечание стороны, при написании нового кода django используйте render вместо render_to_response, поскольку render_to_response планируется отказаться в будущем и в конечном итоге удалить.

+0

Я пробовал это, но я получаю сообщение об ошибке: (IntegrityError at/gaestebuch/send_update_profile/ (1048, «Столбец« user_id »не может быть нулевым»)). Любая идея, как я мог это исправить? Извините за поздний ответ – Dannad

+0

, это другой вопрос. Вам нужно взять идентификатор пользователя из request.user в форме init – e4c5

+1

Большое спасибо за помощь! – Dannad