1
我正在嘗試創建員工列表。我可以爲該員工分配用戶名,密碼和電子郵件,也可以更新員工信息,以便我可以更新用戶名,密碼或電子郵件。我可以創建一個員工,並創建用戶名和密碼以及更新員工信息,但在更改員工的用戶名或密碼或電子郵件時,會創建一個新用戶。創建新用戶名而不是更新
這是我曾嘗試
class EmployeeForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput)
class Meta:
model = models.Employee
fields = ('name', 'designation', 'section', 'phone_number', 'mobile_number',
'email', 'gender', 'role', 'username', 'password', 'avatar',)
def employee(request):
form = EmployeeForm(request.POST or None)
if request.method == "POST" and form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
email = form.cleaned_data['email']
office_instance = OfficeSetup.objects.get(owner=request.user)
form = form.save(commit=False)
form.office = office_instance
user = User.objects.create_user(
username=username, password=password, email=email)
user.save()
form.save()
messages.success(request, 'Thank you')
return redirect('employee-list')
messages.warning(request, 'Error')
context = {
'form': form
}
return render(request, 'dashboard/hrm/employee.html', context)
編輯部分
def edit_employee(request, id):
instance = get_object_or_404(Employee, id=id)
form = EmployeeForm(request.POST or None, instance=instance)
if request.method == "POST" and form.is_valid():
employee = Employee.objects.get(id=id)
prev_username = employee.username
username = form.cleaned_data['username']
password = form.cleaned_data['password']
email = form.cleaned_data['email']
office_instance = OfficeSetup.objects.get(owner=request.user)
form = form.save(commit=False)
form.office = office_instance
# change username or password or email if admin has done the changes in
# those field
try:
user_instance = User.objects.get(username=prev_username)
user_instance.username = username
user_instance.set_password(password)
user_instance.email = email
form.save()
user_instance.save()
except User.DoesNotExist:
messages.error(request, "Following User Does Not Exist!")
except:
user = User.objects.create_user(
username=username, password=password, email=email)
form.save()
user.save()
messages.success(request, "Thank you")
return redirect('employee-list')
messages.warning(request, "Error")
context = {
'form': form
}
return render(request, 'dashboard/hrm/employee.html', context)
截圖是使流動或用例明確
更新的代碼
def edit_employee(request, id):
instance = get_object_or_404(Employee, id=id)
form = EmployeeForm(request.POST or None, instance=instance)
if request.method == "POST" and form.is_valid():
employee = Employee.objects.get(id=id)
prev_username = employee.username
username = form.cleaned_data['username']
password = form.cleaned_data['password']
email = form.cleaned_data['email']
office_instance = OfficeSetup.objects.get(owner=request.user)
form = form.save(commit=False)
form.office = office_instance
# change username or password or email if admin has done the changes in
# those field
user, created = User.objects.get_or_create(username=prev_username)
if created:
user.set_password(password)
user.email = email
form.save()
user.save()
return redirect('employee-list')
user.set_password(password)
user.email = email
form.save()
user.save()
return redirect('employee-list')
messages.warning(request, "Error")
context = {
'form': form
}
return render(request, 'dashboard/hrm/employee.html', context)
有沒有必要使用嘗試除外? – milan
我不這麼認爲。 – FlipperPA
我可以在問題中顯示更新的代碼嗎? – milan