Как я могу обновить профиль пользователя с пользовательской страницы администратора.
Я создал пользовательскую панель администратора на определенной странице, когда я нажимаю на «полное имя пользователя», меня перенаправляют к деталям.обновите страницу с pk человека, на которого я нажал.
К сожалению, используя приведенный ниже код, я получаю информацию о суперпользователе, вошедшем в систему, а не о пользователе, из идентификатора, по которому щелкнули.
Как я могу получить информацию о пользователе, на которого нажали и как суперпользовательское обновление?
def employees_directory_profile(request, employee_pk):
"""
Access profile of employee from Employee ListView in dashboard.
"""
employee = get_object_or_404(Profile, pk=employee_pk)
if request.method == 'POST':
form = EditProfileForm(request.POST, instance=request.user)
extended_profile_form = ProfileForm(request.POST, # Populate image data if POST
request.FILES,
instance=request.user.profile)
if form.is_valid() and extended_profile_form.is_valid():
form.save()
extended_profile_form.save()
return redirect('accounts:profile')
else:
form = EditProfileForm(instance=request.user)
extended_profile_form = ProfileForm(instance=request.user.profile)
context = {
'form':form,
'extended_profile_form':extended_profile_form,
'employee':employee
}
return render(request, 'accounts/dashboard-employee-active-profile.html', context)
Затем, когда я пытаюсь:
if request.method == 'POST':
form = EditProfileForm(request.POST, instance=employee)
extended_profile_form = ProfileForm(request.POST, # Populate image data if POST
request.FILES,
instance=employee.profile)
if form.is_valid() and extended_profile_form.is_valid():
form.save()
extended_profile_form.save()
return redirect('accounts:profile')
else:
form = EditProfileForm(instance=employee)
extended_profile_form = ProfileForm(instance=employee.profile)
, я получаю сообщение об ошибке ниже от консоли.
AttributeError at /dashboard/employees-directory-profile/10
'Profile' object has no attribute 'profile'
Request Method: GET
Request URL: http://127.0.0.1:8000/dashboard/employees-directory-profile/10
Django Version: 2.1
Exception Type: AttributeError
Exception Value:
'Profile' object has no attribute 'profile'
Exception Location: /Users/macadmin/Documents/Accel_Capital/Web_apps/accel_hr/accel_hr/accounts/views.py in employees_directory_profile, line 212
Python Executable: /Users/macadmin/Documents/Accel_Capital/Web_apps/accel_hr/bin/python
Python Version: 3.7.0
Python Path:
['/Users/macadmin/Documents/Accel_Capital/Web_apps/accel_hr/accel_hr',
'/anaconda3/lib/python37.zip',
'/anaconda3/lib/python3.7',
'/anaconda3/lib/python3.7/lib-dynload',
'/Users/macadmin/Documents/Accel_Capital/Web_apps/accel_hr/lib/python3.7/site-packages']
Server time: Tue, 14 May 2019 11:24:17 -0400
Traceback Switch to copy-and-paste view
/Users/macadmin/Documents/Accel_Capital/Web_apps/accel_hr/lib/python3.7/site-packages/django/core/handlers/exception.py in inner
response = get_response(request) ...
▶ Local vars
/Users/macadmin/Documents/Accel_Capital/Web_apps/accel_hr/lib/python3.7/site-packages/django/core/handlers/base.py in _get_response
response = self.process_exception_by_middleware(e, request) ...
▶ Local vars
/Users/macadmin/Documents/Accel_Capital/Web_apps/accel_hr/lib/python3.7/site-packages/django/core/handlers/base.py in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs) ...
▶ Local vars
/Users/macadmin/Documents/Accel_Capital/Web_apps/accel_hr/accel_hr/accounts/views.py in employees_directory_profile
extended_profile_form = ProfileForm(instance=employee.profile)
models.py ниже:
from django.db import models
from django.conf import settings
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.urls import reverse
User = settings.AUTH_USER_MODEL
GENDER = (
('Male', 'Male'),
('Female', 'Female'))
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
birthday = models.CharField(max_length=10, blank=False)
location = models.CharField(max_length=50, null=True, blank=True)
gender = models.CharField(choices= GENDER, max_length=10, default='Male')
phone_number = models.CharField(max_length=10)
position = models.CharField(max_length=30)
created = models.DateTimeField(auto_now_add=True, auto_now=False)
is_terminated = models.BooleanField(default=False, null=True) # Null = True to be removed
def __str__(self):
return self.user.username
def get_absolute_url(self):
return reverse('accounts:employees-directory-profile', kwargs={'pk': self.pk})
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
'''
For every new user created, create new Profile.
'''
if created:
Profile.objects.create(user=instance)
else:
instance.profile.save()
forms.py
from django.contrib.auth.models import User
from django import forms
from django.contrib.auth import (
authenticate,
login,
get_user_model
)
from django.contrib.auth.forms import UserChangeForm
from .models import Profile, Document
from django.forms import ModelForm
Profile = get_user_model()
class UserLoginForm(forms.Form):
'''
Validate Login form username and password.
'''
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)
def clean(self, *args, **kwargs):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
if username and password:
user = authenticate(username=username, password=password)
if not user:
raise forms.ValidationError('This user does not exist')
if not user.check_password(password):
raise forms.ValidationError('Incorrect password')
if not user.is_active:
raise forms.ValidationError('This user is not active')
return super(UserLoginForm, self).clean(*args, **kwargs)
class UserRegisterForm(forms.ModelForm):
'''
Validate Registration form fields.
'''
email = forms.EmailField(label='Email address')
first_name = forms.CharField(label='First name', required=False, help_text='Optional')
last_name = forms.CharField(label='Last name', required=False, help_text='Optional')
password = forms.CharField(widget=forms.PasswordInput)
password2 = forms.CharField(label='Confirm Password', widget=forms.PasswordInput)
class Meta:
model = User
fields = (
'username',
'first_name',
'last_name',
'email',
'password',
'password2',
)
def clean(self, *args, **kwargs):
password = self.cleaned_data.get('password')
password2 = self.cleaned_data.get('password2')
if password != password2:
raise forms.ValidationError("Passwords must match")
return super(UserRegisterForm, self).clean(*args, **kwargs)
class EditProfileForm(UserChangeForm):
'''
Edit Profile.
'''
class Meta:
model = User
fields = (
'username',
'first_name',
'last_name',
# 'password1',
# 'password2',
'email',
)
def __init__(self, *args, **kwargs):
''' delete password field in edit profile page.'''
super(EditProfileForm, self).__init__(*args, **kwargs)
self.fields.pop('password')
class ProfileForm(forms.ModelForm):
GENDER = (
('Male', 'Male'),
('Female', 'Female')
)
# image = forms.ImageField()
birthday = forms.CharField(label='Birthday')
location = forms.CharField(label='Location', required=False)
gender = forms.CharField(max_length=10, widget=forms.Select(choices=GENDER))
phone_number = forms.CharField(max_length=10)
position = forms.CharField(label='Position', max_length=20, required=False)
class Meta:
model = Profile
fields = (
'birthday',
'location',
'gender',
'phone_number',
'position'
)
Любая помощь будет высоко ценится.