Удаление и создание в CreateView django

Здравствуйте, я делаю список дел на django и у меня есть вопрос. Могу ли я удалять и создавать элементы в одном представлении? Лично я бы не использовал CreateView для этого, а сделал бы как в 'def post' и игнорировал 'get_success_url', но является ли это хорошей и djangonic практикой? views.py

 class Home(CreateView):
       model = Item
       template_name = 'home/todo.html'
       form_class = itemCreationForm
       def get_context_data(self, **kwargs):
          context = super().get_context_data(**kwargs)
          context['items'] = Item.objects.all()
          return context
       def get_success_url(self):
          return reverse('home-page')
       def post(self, request):
          form = itemCreationForm()
          if 'delete' in self.request.POST:
             print('deleted')
             return redirect('home-page')
          if 'add' in self.request.POST and form.is_valid():
             form.save()
             return HttpResponse('home-page')

HTML

 <div class="card__items-list">
                   {% for item in items %}
                        <div class="card__item-row">
                         <p class="card__item">{{ item.name }}</p> 
                         <form action="{% url 'home-page' %}" class="card__delete" method="POST"> {% csrf_token %}
                            <button class="card__delete__button"  name="delete" type="submit">&#10008</button>
                         </form>
                        </div> 
                    {% endfor %}
                </div>
                    <form name="add" method="POST"> {% csrf_token %}
                        {{ form }}
                        <button  name="add" class="submit-button" type="submit">Submit</button>
                    </form>
            </div>

Можно обрабатывать удаление и создание объектов в одной функции представления Django. Однако, возможно, лучшей практикой является обработка этих операций в отдельных глаголах действия HTTP (POST vs DELETE).

Например, ваше представление Home может обрабатывать обе эти операции, но разделять их на разные if блоки на основе HTTP-глагола действия запроса. Тогда с вашей веб-страницы операция создания будет отправлять HTTP POST запрос, а операция удаления - HTTP DELETE запрос.

Это можно сделать в одной функции представления Django, используя следующий пример кода:

def my_sample_view(request):
    if request.method == "POST":
        # Handle create logic here.
    elif request.method == "DELETE":
        # Handle delete logic here.

Да, вы можете это сделать.

Лично я бы использовал FormView, а не CreateView, и сделал бы обработку POST в методе form_valid. Это противоречит ожиданиям, что CreateView будет что-то удалять, тогда как обработка формы может делать все, что угодно.

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