如何在 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)
...