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

#python #django

#питон #джанго

Вопрос:

Здравствуйте, я составляю список дел django, и у меня есть вопрос. Могу ли я удалять и создавать элементы в одном представлении? Лично я бы не стал использовать CreateView для этого и делать это, как в «def post», и игнорировать «get_success_url», но это хорошая и диангоническая практика? 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

 lt;div class="card__items-list"gt;  {% for item in items %}  lt;div class="card__item-row"gt;  lt;p class="card__item"gt;{{ item.name }}lt;/pgt;   lt;form action="{% url 'home-page' %}" class="card__delete" method="POST"gt; {% csrf_token %}  lt;button class="card__delete__button" name="delete" type="submit"gt;amp;#10008lt;/buttongt;  lt;/formgt;  lt;/divgt;   {% endfor %}  lt;/divgt;  lt;form name="add" method="POST"gt; {% csrf_token %}  {{ form }}  lt;button name="add" class="submit-button" type="submit"gt;Submitlt;/buttongt;  lt;/formgt;  lt;/divgt;  

Ответ №1:

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

Например, ваше Home представление может обрабатывать обе эти операции, но разделять их на разные if блоки на основе глагола HTTP-действия запроса. Затем с вашей веб-страницы операция создания отправит запрос HTTP POST, а операция удаления отправит запрос HTTP НА УДАЛЕНИЕ.

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

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

Ответ №2:

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

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