2016-12-12 3 views
1

Je suis un débutant à Django. J'ai quelques problèmes avec les formulaires après avoir déménagé dans une nouvelle version. A la suite,Django Formulaire devenant invalide

1, Le modèle

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, la forme

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

3, et enfin la fonction de vue

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

Ce code a travaillé avec Django 1.8. Mais après le portage vers Django 1.10.4, le formulaire devient invalide. Je crois, le problème est avec OneToOneField.

IMP: Aussi, j'utilise l'application de compte de pinax pour la gestion de compte.

Pourquoi ce formulaire n'est plus valide?

+0

Alors, quelle erreur avez-vous? –

+0

Son élévation du "raise NotImplemented (" Que faire si l'utilisateur n'a pas de profil associé? "" Message, ce qui signifie que le formulaire devient invalide! ... – Warlock

+0

puis écrivez le code correct, parce que tout le monde vous écrira à ce sujet –

Répondre

1

Lorsque vous soumettez le formulaire, il ne semble pas qu'une entrée correcte ait été donnée pour les deux champs (utilisateur et image de profil). Ma conjecture est que vous n'envoyez pas par l'utilisateur dans le formulaire ce qui signifie qu'il est invalide. Donc, vous ne téléchargez que l'image.

Vous n'avez pas besoin d'avoir 'user' dans l'attribut champs de formulaire puisque vous avez déjà accès à celui-ci dans la vue avec 'request.user'. Supprimez donc le champ 'user' du formulaire. De plus, pour vous assurer que c'est correct, changez 'user = current_user.id' en 'user = current_user' afin que vous soyez une occurrence de match avec instance plutôt qu'une instance avec id.

+0

C'est parfait Vous le voyez, merci – Warlock

+0

Comme je l'ai mentionné dans la question, j'utilisais ce même code dans Django 1.8 et cela a fonctionné (même s'il y a une erreur). Saviez-vous pourquoi? – Warlock