Как передать форму в шаблон и сохранить ее? 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 в шаблоне для вывода списка элементов.

Вернуться на верх