2016-06-08 2 views
1

Ich habe eine Ansicht erstellt, um ein Benutzerprofil zu aktualisieren. Beim Hochladen eines Bildes wird das Bild korrekt gespeichert, aber wenn das Profil erneut aktualisiert wird, wird das Bild nicht mehr gespeichert. Wie kann ich das Problem lösen? Ich freue mich für jede Hilfe!(Django) Durch die Aktualisierung des UserProfile wird das Bild nicht korrekt gespeichert.

meiner Klasse Userprofile sieht wie folgt aus:

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 

Ich benutze zwei Ansichten:

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

Das ist meine Form ist:

class UserProfileForm(forms.ModelForm): 

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

Wenn es etwas anderes notwendig aufgeben Ich füge das gerne hinzu.

Ich bin froh für jede Hilfe!

+0

Wie sieht Ihre Form aus? – e4c5

+1

Sorry, ich habe es gerade hinzugefügt – Dannad

Antwort

1

Da Sie eine Modelform Unterklasse statt einer Formularunterklasse verwenden, sollten Sie nutzt es Funktionalität machen, vor allem der 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

So kann Ihr Code CA als

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

Auf eine vereinfacht werden Randnotiz, wenn Sie neuen Django-Code schreiben, verwenden Sie render anstelle von render_to_response, da render_to_response in der Zukunft veraltet ist und eventuell entfernt wird.

+0

Ich versuchte dies, aber ich bekomme den Fehler: (IntegrityError at/gaestebuch/send_update_profile/ (1048, "Spalte 'user_id' kann nicht null sein")). Irgendeine Idee, wie ich das beheben könnte? Sorry für die späte Antwort – Dannad

+0

das ist eine andere Frage. Sie müssen die Benutzer-ID von request.user in der Form init – e4c5

+1

greifen Vielen Dank für Ihre Hilfe! – Dannad

Verwandte Themen