【发布时间】:2023-03-06 15:53:02
【问题描述】:
我想为带有 JSon 响应的 CreateView 实现引导模式。我之前已经用基于函数的视图做过类似的事情。但是,当我尝试使用基于类的视图 (CBV) 时,会遇到很多错误。在我解决了一个错误后,我得到了另一个错误。我什至不知道现在出了什么问题,因为当前的错误并不能真正解释。
forms.py:
class CategoryForm(ModelForm):
category_name = forms.CharField(max_length=70)
class Meta:
model = Category
fields = ['category_name']
def __init__(self, user, *args, **kwargs):
super(CategoryForm, self).__init__(*args, **kwargs)
views.py
class CategoryCreateView(LoginRequiredMixin, CreateView):
form_class = CategoryForm
data = dict()
def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
#context = super().get_context_data(**kwargs)
#context['form'] = form_class
context = {'form': form_class}
return context
def form_valid(self, form):
form.instance.user = self.request.user
form.save(commit=True)
data['form_is_valid'] = True
data['html_form'] = render_to_string('partial_category_create.html',
super().get_context_data(),
request=self.request
)
return JsonResponse(data)
def form_invalid(self, form):
data['form_is_valid'] = False
data['html_form'] = render_to_string('partial_category_create.html',
super().get_context_data(),
request=self.request
)
def post(self, request):
form = CategoryForm(data=request.POST, user=request.user)
def get(self, request):
form = CategoryForm(request.user)
data['html_form'] = render_to_string('partial_category_create.html',
super().get_context_data(),
request=self.request
)
下面的代码基本上就是我想在基于类的视图中实现的功能
@login_required
def category_create(request):
data = dict()
if request.method == 'POST':
form = CategoryForm(data=request.POST, user=request.user)
if form.is_valid():
form.instance.user = request.user
#print(form.cleaned_data)
form.save(commit=True)
data['form_is_valid'] = True
else:
data['form_is_valid'] = False
else:
form = CategoryForm(request.user)
context = {'form': form}
data['html_form'] = render_to_string('partial_category_create.html',
context,
request=request
)
return JsonResponse(data)
错误:
Internal Server Error: /tasks/category/create/
Traceback (most recent call last):
File "C:\Users\User\.virtualenvs\toDoList-xn6KQcJg\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\User\.virtualenvs\toDoList-xn6KQcJg\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\User\.virtualenvs\toDoList-xn6KQcJg\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\User\.virtualenvs\toDoList-xn6KQcJg\lib\site-packages\django\views\generic\base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\User\.virtualenvs\toDoList-xn6KQcJg\lib\site-packages\django\contrib\auth\mixins.py", line 52, in dispatch
return super().dispatch(request, *args, **kwargs)
File "C:\Users\User\.virtualenvs\toDoList-xn6KQcJg\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
return handler(request, *args, **kwargs)
File "C:\Users\User\django\todolist\tasks\views.py", line 61, in get
super().get_context_data(),
File "C:\Users\User\.virtualenvs\toDoList-xn6KQcJg\lib\site-packages\django\views\generic\edit.py", line 66, in get_context_data
kwargs['form'] = self.get_form()
File "C:\Users\User\.virtualenvs\toDoList-xn6KQcJg\lib\site-packages\django\views\generic\edit.py", line 33, in get_form
return form_class(**self.get_form_kwargs())
TypeError: __init__() missing 1 required positional argument: 'user'
[25/Feb/2020 20:47:34] "GET /tasks/category/create/ HTTP/1.1" 500 21020
views.py 的第 61 行,在方法 get 中是该行
super().get_context_data(),
我想要做的是提供上下文。请检查基于函数的视图以获取等效项
【问题讨论】:
-
你能发布完整的异常跟踪日志吗?
-
@Charnel,我已经提供了完整的异常跟踪
标签: python json django django-views