Как передать форму в шаблон и сохранить ее? Django
Здравствуйте, у меня вопрос, как я могу передать форму в HTML шаблон и сохранить ее в представлении на основе класса? Как вы видите в views.py я сделал Item.objects.create после Post запроса, но хорошая ли это практика, если Django предоставляет формы?
Форма:
class itemCreationForm(ModelForm):
name = forms.CharField()
class Meta:
model = Item
fields = ['name']
views.py:
class Home(ListView):
model = Item
template_name = 'home/todo.html'
form_class = itemCreationForm
def post(self, request):
item = self.request.POST.get('item')
Item.objects.create(name=item)
return HttpResponse(f'Post! {item}')
Я бы посоветовал работать с CreateView
вместо этого, и добавить немного дополнительной логики для отображения списка.
Мы можем реализовать это с помощью:
from django.urls import reverse
class HomeView(CreateView):
model = Item
template_name = 'home/todo.html'
form_class = itemCreationForm
def get_context_data(self, *args, **kwargs):
data = super().get_context_data(*args, **kwargs)
data['object_list'] = Item.objects.all()
return data
def get_success_url(self):
return reverse('name-of-home-view')
Таким образом, вы можете использовать {{ form }}
для вывода формы, он также обработает POST-запрос и создаст экземпляр, и вы сможете обратиться к object_list
в шаблоне для вывода списка элементов.