Django Crispy Form не добавляет и не обновляет базу данных
Здравствуйте, я пишу небольшой проект об автомастерской и вот с какой проблемой я столкнулся.
Я пытаюсь добавить новый автомобиль и все вроде бы работает, но когда я заполняю форму и нажимаю submit, она просто перенаправляет меня на страницу продуктов без ошибок и без добавления нового автомобиля в базу данных. Вот код.
views.py
class AddProductView(View):
action = 'Add'
template_name = 'myApp/manipulate_product.html'
context = {
}
form_class = ManipulateProductForm
def get(self, req, *args, **kwargs):
form = self.form_class()
self.context['action'] = self.action
self.context['form'] = form
return render(req, self.template_name, self.context)
def post(self, req, *args, **kwargs):
form = self.form_class(req.POST or None)
if form.is_valid():
form.save()
else:
print(form.errors)
return redirect('products', permanent=True)
models.py
class Car(models.Model):
name = models.CharField(max_length=32)
model = models.CharField(max_length=32, unique=True)
price = models.IntegerField(validators=[
MinValueValidator(0),
])
def __str__(self):
return f'{self.name} {self.model}'
forms.py
class ManipulateProductForm(forms.ModelForm):
def __init__(self, action="Submit", *args, **kwargs):
super().__init__(*args, **kwargs)
self.action = action
self.helper = FormHelper(self)
self.helper.add_input(Submit('submit', self.action, css_class='btn btn-primary'))
class Meta:
model = Car
fields = '__all__'
manipulate_product.html
{% extends 'base.html' %}
{% load static %}
{% load crispy_forms_tags %}
{% block content %}
<div class="product-manipulate-container">
{% crispy form form.helper%}
</div>
{% endblock %}
Я уверен, что проблема в Crispy, потому что если я заменю код в forms.py и manipulate_product.html на этот
forms.py
class ManipulateProductForm(forms.ModelForm):
class Meta:
model = Car
fields = '__all__'
manipulate_product.html
{% extends 'base.html' %}
{% load static %}
{% load crispy_forms_tags %}
{% block content %}
<div class="product-manipulate-container">
<form action="" method="POST">
{% csrf_token %}
{{ form.as_div }}
<input type="submit" value="Submit">
</form>
</div>
{% endblock %}
Все работает нормально!
Я заметил, что когда я использую Crispy в методе AddProductView post <<<Метод is_valid() возвращает False, но без Crispy возвращает True
Я перепробовал все, кроме одного - удалить весь проект и начать заново. Я искал на youtube, google, stackoverflow, но не нашел ничего похожего. Посмотрел документацию Crysp, но там тоже пусто.
Надеюсь, кто-то сталкивался с этой проблемой и сможет мне помочь.
Спасибо!
Попробуйте переписать вашу форму следующим образом:
class ManipulateProductForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ManipulateProductForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.form_action = 'Submit'
self.helper.add_input(Submit('submit', 'Submit', css_class='btn btn-primary'))
class Meta:
model = Car
fields = '__all__'
А в своем шаблоне вы можете просто сделать следующее, так как вы использовали имя помощника по умолчанию:
{% crispy form %}