我已经成功更新了用户的个人资料,但是由于某种原因,它正在以某种方式删除会话。我使用的是与初始用户创建时相同的表单-仅通过initial
填写字段。难道是某些内置的Django魔术使我的会话混乱了吗?
这是请求的样子:
[09/May/2020 22:40:38] "POST /user/settings HTTP/1.1" 200 9564
[09/May/2020 22:40:41] "GET /users/12/ HTTP/1.1" 302 0
views.py
# @login_required(login_url='/login/')
def settings(request):
user = request.user
if request.method == 'POST':
POST = request.POST.copy()
POST['user_type'] = user.user_type
form = CreateUserForm(POST, instance=request.user)
if form.is_valid():
user = form.save(commit=False)
user.entity_type = request.user.entity_type
print("Saving user.")
user.save()
user.session = request.session
# return redirect('dashboard', pk=request.user.id)
else:
print(form.errors)
else:
email = user.email
zipcode = user.zipcode
user_type = user.user_type
if user.entity_type == 'individual':
first_name = user.first_name
last_name = user.last_name
form = CreateUserForm(instance=request.user, initial={ 'first_name': first_name, 'last_name': last_name, 'email': email, 'zipcode': zipcode, 'user_type': user_type })
elif user.entity_type == 'business':
business_name = user.business_name
print(user_type)
form = CreateUserForm(instance=request.user, initial={ 'business_name': business_name, 'email': email, 'zipcode': zipcode, 'user_type': user_type })
context = {'form':form}
return render(request, 'user/settings.html', context)
forms.py
class CreateUserForm(UserCreationForm):
first_name = forms.CharField(max_length=100, help_text='First Name', required=False)
last_name = forms.CharField(max_length=100, help_text='Last Name', required=False)
business_name = forms.CharField(max_length=100, help_text='Business Name', required=False)
email = forms.EmailField(max_length=150, help_text='Email')
zipcode = forms.IntegerField(help_text='Zip Code')
user_type = forms.CharField(label='How will you be using this application?', widget=forms.Select(choices=USER_TYPE_LIST, attrs={'class': "form-control"}))
class Meta:
model = User
fields = ['email', 'first_name', 'last_name', 'business_name', 'email', 'zipcode', 'user_type', 'password1', 'password2']
def clean(self):
first_name = self.cleaned_data.get('first_name')
last_name = self.cleaned_data.get('last_name')
business_name = self.cleaned_data.get('business_name')
if not first_name and not last_name and not business_name:
raise forms.ValidationError('The name field is required')
return self.cleaned_data