0
我看過關於這個錯誤的其他問題,但似乎無法找到我的問題。我知道在下面的代碼中有更好的方法可以做我想要做的一些事情,但現在我只是試圖找出導致以下錯誤的罪魁禍首。爲什麼我得到'str'對象在form_valid上沒有'get'屬性?
Internal Server Error: /users/create/
Traceback (most recent call last):
File "/home/ubuntu/workspace/venv_mymanagedservices/lib/python3.5/site-packages/django/core/handlers/exception.py", line 39, in inner
response = get_response(request)
File "/home/ubuntu/workspace/venv_mymanagedservices/lib/python3.5/site-packages/django/utils/deprecation.py", line 138, in __call__
response = self.process_response(request, response)
File "/home/ubuntu/workspace/venv_mymanagedservices/lib/python3.5/site-packages/django/middleware/clickjacking.py", line 32, in process_response
if response.get('X-Frame-Options') is not None:
AttributeError: 'str' object has no attribute 'get'
[26/Mar/2017 23:02:14] "POST /users/create/ HTTP/1.1" 500 72448
這裏就是我想創建一個新用戶的觀點:
class CustomerUserCreate(LoginRequiredMixin, CreateView):
model = User
template_name = 'users/user_create.html'
fields = ['username', 'name', 'email', 'password']
# Search for which customer the user is assigned to and deny access if not a customer user or superuser
def render_to_response(self, context):
customer_admins = Customer.objects.filter(users=self.request.user)
if not (customer_admins or self.request.user.is_superuser):
return redirect('/403')
else:
return super(CustomerUserCreate, self).render_to_response(context)
def get_form(self, form_class=None):
form = super(CustomerUserCreate,self).get_form(form_class) #instantiate using parent
customer_admins = Customer.objects.get(users=self.request.user)
# Add a field that allows user to select which companies should be added to the Company models' users field.
form.fields['companies'] = forms.models.ModelMultipleChoiceField(Company.objects.filter(customer=customer_admins))
form.fields['companies'].widget = forms.CheckboxSelectMultiple()
return form
def get_success_url(self):
return reverse('users:list')
def form_valid(self, form):
customer_admins = Customer.objects.filter(users=self.request.user)
if not (customer_admins or self.request.user.is_superuser):
return redirect('/403')
companies_data = form.cleaned_data['companies']
del form.cleaned_data['companies']
# Record which customer account this user should be associated with
form.instance.created_by_customer = Customer.objects.get(users=self.request.user)
new_user = User.objects.create_user(username=form.cleaned_data['username'], email=form.cleaned_data['email'], name=form.cleaned_data['name'], password=form.cleaned_data['password'])
if companies_data:
for company in companies_data:
company.users.add(new_user)
else:
messages.add_message(self.request, messages.WARNING, 'You must select at least 1 company for the new user.')
return reverse('users:create')
# Add a success message
messages.add_message(self.request, messages.SUCCESS, 'User Created.')
return reverse('users:list')
有沒有人有一個更清晰的頭比我做這個呢?我想我可能會把自己和所有我想要做的事完全忽略掉。