如何在 Django 中调试这个 stracktrace?
How to debug this stracktrace in django?
我在模态框内有一个表单,当我单击“保存”时出现以下错误。问题是我不知道在哪里可以找到它,因为它没有显示我的代码中有错误。
Environment:
Request Method: POST
Request URL: http://localhost:8000/user/add/
Django Version: 3.1.3
Python Version: 3.9.0
Installed Applications:
['app.apps.AppConfig',
'users.apps.UsersConfig',
'crispy_forms',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'debug_toolbar']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware']
Traceback (most recent call last):
File "C:\Users\bratca\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\bratca\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
Exception Type: TypeError at /user/add/
Exception Value: __init__() takes 1 positional argument but 2 were given
urls - 这是一个表单视图
urlpatterns = [
path('add/', views.AddUserFormView, name='add-user'),
]
表单视图执行 post 请求逻辑
class AddUserFormView(FormView):
form_class = TbUserAddForm
template_name = 'users/add_user_modal.html'
def post(self, request):
form = self.form_class(request.POST, request.FILES)
if form.is_valid():
user_face_img_md5 = Image.open(
request.FILES['user_face_img_md5'].file)
user_head_img_md5 = Image.open(
request.FILES['user_head_img_md5'].file)
obj = form.save(commit=False)
response = addUserApi(obj.__dict__,
user_face_img_md5, user_head_img_md5)
print(f"Request Response [Add User] --> {response.text}")
return redirect('add-user')
还有表格,我认为这是 init 的问题。当我实例化表单时,我给出 request.POST and request.FILES
class TbUserAddForm(CustomUserCreationForm):
def __init__(self, user, *args, **kwargs):
super().__init__(*args, **kwargs)
self.user = user
if self.user:
self.fields['role'].queryset = TbRole.objects.all().filter(
customer=self.user.customer)
self.fields['department'].queryset = TbDepartment.objects.all().filter(
customer=self.user.customer)
class Meta:
model = TbUser
fields = [...]
当你在 django 中使用 class-based views
时,你应该告诉 django 对你的 class-based view
行为如 urls.py
中的视图:
urlpatterns = [
path('add/', views.AddUserFormView.as_view(), name='add-user'),
]
请注意,您没有将 user
传递给 TbUserAddForm
,这可能是您的下一个错误:
...
form = self.form_class(request.user, request.POST, request.FILES)
...
我在模态框内有一个表单,当我单击“保存”时出现以下错误。问题是我不知道在哪里可以找到它,因为它没有显示我的代码中有错误。
Environment:
Request Method: POST
Request URL: http://localhost:8000/user/add/
Django Version: 3.1.3
Python Version: 3.9.0
Installed Applications:
['app.apps.AppConfig',
'users.apps.UsersConfig',
'crispy_forms',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'debug_toolbar']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware']
Traceback (most recent call last):
File "C:\Users\bratca\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\bratca\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
Exception Type: TypeError at /user/add/
Exception Value: __init__() takes 1 positional argument but 2 were given
urls - 这是一个表单视图
urlpatterns = [
path('add/', views.AddUserFormView, name='add-user'),
]
表单视图执行 post 请求逻辑
class AddUserFormView(FormView):
form_class = TbUserAddForm
template_name = 'users/add_user_modal.html'
def post(self, request):
form = self.form_class(request.POST, request.FILES)
if form.is_valid():
user_face_img_md5 = Image.open(
request.FILES['user_face_img_md5'].file)
user_head_img_md5 = Image.open(
request.FILES['user_head_img_md5'].file)
obj = form.save(commit=False)
response = addUserApi(obj.__dict__,
user_face_img_md5, user_head_img_md5)
print(f"Request Response [Add User] --> {response.text}")
return redirect('add-user')
还有表格,我认为这是 init 的问题。当我实例化表单时,我给出 request.POST and request.FILES
class TbUserAddForm(CustomUserCreationForm):
def __init__(self, user, *args, **kwargs):
super().__init__(*args, **kwargs)
self.user = user
if self.user:
self.fields['role'].queryset = TbRole.objects.all().filter(
customer=self.user.customer)
self.fields['department'].queryset = TbDepartment.objects.all().filter(
customer=self.user.customer)
class Meta:
model = TbUser
fields = [...]
当你在 django 中使用 class-based views
时,你应该告诉 django 对你的 class-based view
行为如 urls.py
中的视图:
urlpatterns = [
path('add/', views.AddUserFormView.as_view(), name='add-user'),
]
请注意,您没有将 user
传递给 TbUserAddForm
,这可能是您的下一个错误:
...
form = self.form_class(request.user, request.POST, request.FILES)
...