首页 > 解决方案 > Django - 更新用户的个人资料会删除会话

问题描述

我成功地更新了用户的个人资料,但由于某种原因,它以某种方式删除了会话。我使用在初始用户创建期间使用的相同表单 - 只需通过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

标签: pythondjangodjango-formsdjango-viewsdjango-templates

解决方案


推荐阅读