2017-05-11 5 views
1

Ich versuche, ein Formular zu erstellen, mit dem Benutzer ihre Profildaten bearbeiten können. Daher möchte ich, dass die neuesten Daten aus der Datenbank angezeigt werden, wenn der Benutzer das Formular bearbeitet. Heres, was ich bisher habe:Django erhalten Formular mit Daten aus der Datenbank

# models.py 
class Profile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    location = models.CharField(max_length=30, blank=True) 
    birthdate = models.DateField(null=True, blank=True) 

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

# forms.py 
class EditProfileForm(forms.ModelForm): 
    class Meta: 
     model = Profile 
     fields = ['location', 'birthdate'] 

# views.py 
class EditProfileFormView(View): 
    form_class = EditProfileForm 
    template_name = 'forums/edit-profile.html' 

    def get(self, request, username): 

     try: 
      user = User.objects.get(username=username) 
     except User.DoesNotExist: 
      raise Http404('The User "' + username + '" could not be found.') 

     if (not request.user.is_authenticated): 
      return HttpResponseForbidden() 
     elif (user.id is not request.user.id): 
      return HttpResponseForbidden() 

     form = self.form_class(None) 
     return render(request, self.template_name, {'form': form}) 

das Formular Einstellung form_class (None) ist das, was mir ein leeres Formular gibt, aber an der gleichen Stelle fällt user.profile ist mir einen Fehler ‚Profil‘ Objekt hat kein Attribut 'get'

Antwort

3

versuchen, das Formular mit einer Instanz bevöl

form = self.form_class(instance=user.profile) 

Hinweis: dies wahrscheinlich mit einem Standard UpdateView

einfacher wäre,
Verwandte Themen