2016-12-12 7 views
1

Ich bin Neuling in Django. Ich habe einige Probleme mit Formen, nachdem ich in eine neue Version gewechselt habe. Im Anschluss,Django Form wird ungültig

1, das Modell

class UserProfileDetails(models.Model): 

user = models.OneToOneField(User) 
profilePicture = models.ImageField('Profile Picture',upload_to='static/ProfilePic/', null=True,blank=True) 

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

2, Die Form

class imageUploadForm(forms.ModelForm): 
class Meta: 
    model= UserProfileDetails 
    fields = ['user','profilePicture'] 

3 und schließlich die Ansicht Funktion

def upload_pic(request): 
current_user = request.user 
if request.method == 'POST': 
    form = imageUploadForm(request.POST, request.FILES) 
    if form.is_valid(): 
     pic = form.cleaned_data['profilePicture'] 
     m = UserProfileDetails(user= current_user.id,profilePicture=pic) 
     m.save() 
    else: 
     raise NotImplemented("What if the user doesn't have an associated profile?") 

return HttpResponseRedirect(reverse('polls:profile')) 

Dieser Code mit Django 1.8 gearbeitet. Aber nach der Portierung nach Django 1.10.4 wird das Formular ungültig. Ich glaube, das Problem ist mit OneToOneField.

IMP: Auch ich benutze Pinax Account App für die Kontoverwaltung.

Warum wird dieses Formular ungültig?

+0

Also, was für ein Fehler haben Sie? –

+0

Seine Anhebung der "raise NotImplemented (" Was ist, wenn der Benutzer kein Profil zugeordnet? "" Nachricht, was bedeutet, dass das Formular wird ungültig! ... – Warlock

+0

dann schreiben Sie den richtigen Code, weil jeder wird Ihnen darüber geschrieben –

Antwort

1

Wenn Sie das Formular absenden, scheint es keine korrekte Eingabe für beide Felder (Benutzer- und Profilbild) zu geben. Meine Vermutung ist, dass Sie nicht durch den Benutzer in der Form senden, was bedeutet, dass es ungültig ist. Du lädst also nur das Bild hoch.

Sie müssen nicht "Benutzer" in den Formularfeldern Attribut haben, wie Sie bereits in der Ansicht mit "request.user" darauf zugreifen. Entfernen Sie das Feld "Benutzer" aus dem Formular.

Um sicherzustellen, dass es korrekt ist, ändern Sie 'user = current_user.id' in 'user = current_user', damit Sie die Instanz mit der Instanz und nicht die Instanz mit der ID vergleichen.

+0

markieren Das ist perfekt Sie erkennen es. Vielen Dank. – Warlock

+0

Wie ich in der Frage erwähnt habe, benutzte ich den gleichen Code in Django 1.8 und es funktionierte (obwohl es einen Fehler gibt). ?? Wusstest du warum? – Warlock