Clean_field functions are not working properly with updateview. How can we correct this behaviour?

Viewed 32

Well I am creating user profile with signals and whenever new user registered, its profile will automatically created and now i want to filled the profil field according to user registration form fields. And then from user side when user go to its profile after login, He will see form which is filled with the information which he/she provided in the registration. If he wants to change some of his information then he can change that. Now the problem is we have to update user model as well as userprofile model in the same time according to the information that user provide in the profile form. right now in my code, conditions and checks are not working properly in forms.py..

views.py

class UserProfile(models.Model):

    user = models.OneToOneField(auth.models.User,related_name='userprofile', on_delete=models.CASCADE)
    avatar = models.ImageField(("displays"), upload_to='displays', height_field=None, width_field=None, max_length=None,default ='user.jpg')
    create_date = models.DateTimeField(default = timezone.now)
    Gender = (
    ('one','Male'),
    ('two','Female'),
    )
    first_name = models.CharField(("first_name"), max_length=50,null=True)
    last_name = models.CharField(("last_name"), max_length=50,null=True)
    username = models.CharField(("username"), max_length=50,null=True)
    age = models.IntegerField(("age"),null=True)
    gender = models.CharField(("gender"), max_length=50,choices=Gender,null=True)


    def save(self,*args, **kwargs):
        if not self.username:
            self.username  = self.user.username
        if not self.age:
            self.age = self.user.age
        if not self.gender:
            self.gender  = self.user.gender
        if not self.first_name:
            self.first_name  = self.user.first_name
        if not self.last_name:
            self.last_name  = self.user.last_name
        super(UserProfile,self).save(*args, **kwargs) 

Forms.py CLean FUNCTIONS ARE NOT RAISING ERRORS.

class UserProfileForm(forms.ModelForm):
    
    class Meta:
        model = UserProfile
        fields = ("avatar","username","first_name","last_name","age","gender")
        Gender = (
            ('one','Male'),
            ('two','Female'),
            )
            
        widgets ={
            'gender' : forms.Select(choices=Gender,attrs={'class': 'form-control'}),
        }
        
     def clean_age(self):
         age = self.cleaned_data["age"]
         print(age,'hm here')
         if age < 18:
             raise forms.ValidationError("You're age should be 18 plus")
         return age
    
     def clean_username(self):
         username = self.cleaned_data['username']
         if User.objects.filter(username=username).exists():
             raise forms.ValidationError("username already exists")
         return username

views.py

class UserProfileUpdateView(UpdateView):
    refirect_field_name ='accounts:profile'
    template_name = 'accounts/profiles/profile_update.html'
    form_class = UserProfileForm
    model = UserProfile

    def get_object(self, *args, **kwargs):
        return self.request.user.userprofile
    
    def get_context_data(self, *args, **kwargs):
        context = super(UserProfileUpdateView, self).get_context_data(*args, **kwargs)
        update_form = UserProfileForm(instance = self.request.user.userprofile)
        context['form']=update_form
        return context
    
    def form_valid(self, form):
            username = form.cleaned_data['username']
            print('username :',username)
            first_name = form.cleaned_data['first_name']
            print('first name :',first_name)
            last_name = form.cleaned_data['last_name']
            print('last name :',last_name)
            age = form.cleaned_data['age']
            print('age :',age)
            gender = form.cleaned_data['gender']
            print('gender :',gender)
            # usermodel save
            user = User.objects.get(username=self.request.user)
            print('GOT reqested User',user)
            user.username = username
            print('changed username :',user.username)
            user.age = age
            print('changed age :',user.age)
            user.gender = gender
            print('changed gender:',user.gender)
            user.first_name = first_name
            print('changed first name :',user.first_name)
            user.last_name = last_name
            print('changed last name :',user.last_name)
            user.save()
            # userprofile save
            profile = UserProfile.objects.get(user=self.request.user)
            print('GOT reqested User',profile)
            profile.username = username
            print('changed username :',profile.username)
            profile.age = age
            print('changed age :',profile.age)
            profile.gender = gender
            print('changed gender:',profile.gender)
            profile.first_name = first_name
            print('changed first name :',profile.first_name)
            profile.last_name = last_name
            print('changed last name :',profile.last_name)
            profile.save()
            form.save()
            return super().form_valid(form)
0 Answers
Related