I have a Model called UserAccount, I have tried several ways to update the data for an existing user, it responds that changes are successful without any error but still nothing is reflecting in Database
Here is the Model
class UserAccount(AbstractBaseUser,PermissionsMixin):
first_name = models.CharField( max_length=100)
last_name = models.CharField(max_length=100)
email = models.EmailField(_("email"),validators=[EmailValidator()],unique=True)
date_added = models.DateTimeField(auto_now_add=True)
phone = models.CharField(max_length=20, validators=[RegexValidator(r'^\d{12}$', 'Enter a valid phone number.')])
profile_picture = models.ImageField(upload_to='media/users_photos/%Y/%m',null=True,blank=True)
employee_id = models.IntegerField(validators=[MinValueValidator(1), MaxValueValidator(999)], null=True,blank=True)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
last_login = models.DateTimeField(auto_now_add=True , null=True)
objects = CustomUserAccountManager()
USERNAME_FIELD = "email"
REQUIRED_FIELDS = ["first_name", "last_name","phone"]
EMAIL_FIELD = "email"
class Role(models.TextChoices):
ADMIN = "Admin", "Admin"
MANAGER = "Manager", "manager"
NORMALUSER = "Normal", "normaluser"
base_role = Role.NORMALUSER
role = models.CharField(max_length=50, choices=Role.choices)
def save(self, *args, **kwargs):
if not self.pk:
self.role = self.base_role
return super().save(*args, **kwargs)
def __str__(self):
if self.first_name and self.last_name:
fullname = f'{self.first_name} {self.last_name}'
elif self.first_name:
fullname = self.first_name
elif self.last_name:
fullname = self.last_name
else:
fullname = "Unnamed User"
return fullname
# Add related_name to avoid clashes
groups = models.ManyToManyField(
'auth.Group',
related_name='user_accounts',
blank=True,
help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.',
verbose_name='groups',
)
user_permissions = models.ManyToManyField(
'auth.Permission',
related_name='user_accounts',
blank=True,
help_text='Specific permissions for this user.',
verbose_name='user permissions',
)
def get_username(self):
return self.email
Here is theForm
class EditUserForm(forms.ModelForm):
class Meta:
model = UserAccount
fields = ['first_name', 'last_name', 'email', 'phone', 'profile_picture', 'employee_id']
Here is the View
def edit_ni_user(request , user_id):
request_user = get_object_or_404(UserAccount,id=user_id)
edit_user_form = EditUserForm()
if request.method == "POST":
edit_user_form =EditUserForm(request.POST, request.FILES , instance=request_user)
if edit_user_form.is_valid():
print("edit_user_form is valid")
newfirst_name = edit_user_form.cleaned_data['first_name']
newlast_name = edit_user_form.cleaned_data['last_name']
newphone = edit_user_form.cleaned_data['phone']
newprofile_picture = edit_user_form.cleaned_data['profile_picture']
newemployeeid = edit_user_form.cleaned_data['employee_id']
request_user.first_name = newfirst_name
request_user.last_name = newlast_name
request_user.phone = newphone
request_user.profile_picture = newprofile_picture
request_user.employee_id= newemployeeid
request_user.email = request_user.email
request_user.save()
print(get_object_or_404(UserAccount,id=user_id))
print(UserAccount.objects.filter(id = request_user.pk).first())
messages.success(request, f" {request_user} Edited Successfully")
return redirect('index')
else:
# Iterate over form errors and add appropriate messages
for field, errors in edit_user_form.errors.items():
for error in errors:
messages.error(request, f'{field}: {error}')
elif request.method=="GET":
edit_user_form = EditUserForm(instance = request_user)
every attempt are showing the success message in the content in the msg are the updated data but its not saved in the Database
am using PostgreSQL v 15
source https://stackoverflow.com/questions/77054955/why-the-user-data-are-not-updated-in-django
Comments
Post a Comment