Я хочу реализовать модальный bootstrap для CreateView с ответом JSon. Я уже делал нечто похожее на это раньше с функциональными представлениями. Однако, когда я пытаюсь сделать это с помощью Class Based Views (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
Строка 61 из views.py
в методе get - это строка super().get_context_data(),
Я пытаюсь создать контекст. Пожалуйста, проверьте функциональный вид на эквивалент