Editing Profile not updating

Viewed 29

I am editing profile using Django framework. The problem lies where I cannot save or update the data inputted by the user and it shoes the error list. If I make it as not required, it shows blank in the system. How can I only save the ntry which user update and remain all other entry unchanged? Thank you

Error: <ul class="errorlist"><li>username<ul class="errorlist"><li>This field is required.</li></ul></li><li>email<ul class="errorlist"><li>This field is required.</li></ul></li><li>password<ul class="errorlist"><li>This field is required.</li></ul></li><li>confirm_password<ul class="errorlist"><li>This field is required.</li></ul></li><li>password_readonly<ul class="errorlist"><li>This field is required.</li></ul></li></ul>

Edit User Profile

def sa_profile_edit(request):
    if request.user.is_authenticated:
        form =UserFormAdmin(instance=request.user)
         form_profile = MemberForm(instance=request.user.usermember)
         context = {'form':form, 'form_profile': form_profile}
         if request.method == 'POST':
            form =UserFormAdmin(request.POST,instance=request.user)
            form_profile = MemberForm(request.POST, request.FILES, instance=request.user.usermember)
            if form.is_valid() and form_profile.is_valid():
                 form.save()
                 form_profile.save()
                 messages.success(request,'Profile Successfully Updated')
                 return redirect('sa_profile')
             else:
                 print(form.errors)
                 form =UserFormAdmin(instance=request.user)
                 form_profile = MemberForm(instance=request.user.usermember)
                 user_data = request.user
                 context = {'form':form,'user_data':user_data, 'form_profile': form_profile}
                 return render(request, 'pages/sa_editProfile.html', context)
return render(request, 'pages/sa_editProfile.html', context)

If role is super -- only super can view this

def check_role_super(user):
    if user.role == 3:
        return True
    else:
        raise PermissionDenied

Model

class User(AbstractBaseUser):
    MEMBER = 1
    ADMIN = 2
    SUPERADMIN = 3
    ROLE_CHOICE = (
        (MEMBER, 'Member'),
        (ADMIN, 'Admin'),
         (SUPERADMIN, 'Super Admin')
     )

    ACTIVE = 1
    DELETED = 2
    DEACTIVATED = 3

    STATUS = (
        (ACTIVE, 'Active'),
        (DELETED, 'Deleted'),
         (DEACTIVATED, 'Deactivated')
     )

     first_name = models.CharField(max_length=50)
     middle_name = models.CharField(max_length=50, default="Some String")
     last_name = models.CharField(max_length=50)
     username = models.CharField(max_length=50, unique=True)
     email = models.EmailField(max_length=100, unique=True)
     mobile_number = models.CharField(max_length = 100, db_index=True, null = True, 
validators=[

        RegexValidator(
            regex='^(\+\d{1,3})?,?\s?\d{8,13}',
            message='Phone number must not consist of space and requires country 
code. eg : +639171234567',
        ),
    ])
     password = models.CharField(max_length = 100,validators=[MinLengthValidator(8),
    
    ])
     role = models.PositiveSmallIntegerField(choices=ROLE_CHOICE, blank=True, null=True)
     status = models.PositiveSmallIntegerField(choices=STATUS, blank=True, null=True)

# required fields
     date_joined = models.DateTimeField(auto_now_add=True)
     last_login = models.DateTimeField(auto_now_add=True)
     created_date= models.DateTimeField(auto_now_add=True)
     modified_date = models.DateTimeField(auto_now_add=True)
    is_admin = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=False)
     is_superadmin = models.BooleanField(default=False)

    USERNAME_FIELD = 'username'
     REQUIRED_FIELDS = ['email', 'first_name', 'middle_name', 'last_name', 'mobile_number']

     objects = UserManager()

    def __str__(self):
        return self.username

    def has_perm(self, perm, obj=None):
        return self.is_admin

     def has_module_perms(self, app_label):
         return True

    def get_role(self):
        if self.role == 1:
            user_role = 'Member'
        elif self.role == 2:
            user_role = 'Admin'
        elif self.role == 3:
            user_role = 'Super Admin'
        return user_role

    def get_status(self):
        if self.status == 1:
             user_status = 'Active'
        elif self.status == 2:
             user_status = 'Deleted'
        elif self.status == 3:
             user_status = 'Deactivated'
        return user_status

class userMember(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    birthdate = models.DateField(blank=True, null=True)
    profile_picture = models.ImageField(upload_to='users/profile_pictures', blank=True, null=True)
    cover_color = ColorField(format='hexa', blank=True, null=True)
    upload_id = models.ImageField(upload_to='member/id', blank=True, null=True)
    created_at = models.DateTimeField(auto_now=True)
    modified_at = models.DateTimeField(auto_now=True)

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

Form

class MemberForm(forms.ModelForm):
    birthdate = forms.DateField(widget=DateInput(attrs={'class': 'form-control ', }))
    profile_picture = forms.FileField(widget=forms.FileInput(attrs={'class': 'btn btn-info'}))
    class Meta:
        model = userMember
        fields = ['birthdate', 'upload_id', 'profile_picture']

class UserFormAdmin(forms.ModelForm):
    class Meta:
        model = User
        fields = ['first_name', 'middle_name', 'last_name', 'username', 'email', 'mobile_number', 'password']


    first_name = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Jones', 'class': 'form-control ', }))
    middle_name = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'A', 'class': 'form-control', }))
    last_name = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Smith', 'class': 'form-control',}))
    mobile_number = forms.CharField(max_length=15, validators=[RegexValidator(
    '^\+[0-9]{1,3}\.?\s?\d{8,13}', message="Phone number must not consist of space and requires country code. eg : +639171234567")],widget=forms.TextInput(attrs={'placeholder': '09123456789', 'class': 'form-control',}),
                                error_messages={'unique': ("Mobile Number already exists.")})

    email = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'jonesmith@gmail.com', 'class': 'form-control',}),
                        error_messages={'unique': ("Email already exists.")},)
    username = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Jones_Smith31', 'class': 'form-control',}),
                           error_messages={'unique': ("Username already exists.")},)
    password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': '********', 'class': 'form-control',}))
    #password = forms.CharField(validators=[MinLengthValidator(8),RegexValidator('^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z])$', message="Password should be a combination of Alphabets and Numbers")], widget=forms.PasswordInput(attrs={'placeholder': '********', 'style': 'width: 460px; '}))
    confirm_password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': '********', 'class': 'form-control', }))
    password_readonly = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': '********', 'class': 'form-control h6-password', 'readonly':'readonly',}))

    
    
    
    def clean(self):
        clean_data = super(UserFormAdmin, self).clean()
        password = clean_data.get('password')
        confirm_password = clean_data.get('confirm_password')
    
    
    
        if password != confirm_password:
            raise forms.ValidationError(
                "Password and Confirm Password does not match!"
            )
0 Answers
Related