djangodjango-modelsdjango-formsdjango-viewspinax

Django Form getting invalid


I am newbie to Django. I have some troubles with forms after moving into new verison. Following,

1, The model

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, The form

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

3, And finally the view function

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

This code worked with Django 1.8. But after porting to Django 1.10.4, the form is getting invalid. I believe, the problem is with OneToOneField.

IMP: Also, i am using pinax account app for account management.

Why this form is getting invalid?


Solution

  • When you submit the form, it doesn't seem as though a correct input has been given for both fields (user and profile picture). My guess is that you aren't sending through the user in the form which means it is invalid. So you are only uploading the image.

    You do not need to have 'user' in the form fields attribute as you already access that in the view with 'request.user'. So remove the 'user' field from the form.

    Also, to make sure it is correct, change 'user=current_user.id' to 'user=current_user' so you are match instance with instance rather than instance with id.