Я создал приложение Django, которое позволяет пользователям вводить свои сделки с акциями в качестве инструмента ведения журнала. Когда пользователь нажимает на отдельную запись журнала на индексной странице, он попадает на страницу сведений, показывающую всю информацию об этой отдельной записи (single_entry.html). Эта страница обрабатывается UpdateView. На этой странице пользователь может редактировать/обновлять любую информацию, а также УДАЛИТЬ эту конкретную запись. Для этого я импортировал модуль DeletionMixin из django.views.generic.edit.
Однако, когда я нажимаю кнопку «Удалить» в форме, запись дублируется, а не удаляется! Кто-нибудь знает, почему это происходит?? Спасибо за вашу помощь!
Вот мое представление на основе классов в view.py:
класс SingleEntryView(UpdateView): имя_шаблона = "single_entry.html" модель = запись поля = ['тикер', 'стратегия', 'результат', 'комментарии', 'изображение'] успех_url = '/' def post(self, request, *args, **kwargs): если «delete_button» в self.request.POST: return self.delete(запрос, *args, **kwargs) def update_post(self, form, pk): если «update_button» в self.request.POST: форма.экземпляр.пользователь = self.request.user вернуть супер(SingleEntryView, self).update_post(форма) single_entry.html:
{% расширяет 'base.html' %} {% заголовок блока %} Торговый журнал – запись {% endblock title %}Торговый журнал {% блокирует контент %} {% csrf_token %} {% для поля в форме %} {{field.label_tag}} {{поле}} {% если поле.ошибки %} {{ field.errors|striptags }} {% конечный %} {% конец для %} Сохранить Удалить
{% контента в конце блока %} urls.py:
из пути импорта django.urls от администратора импорта django.contrib от . импортировать представления URL-паттерны = [ путь("",views.EntryView.as_view()), path("entries//",views.SingleEntryView.as_view(), name="single-entry"), путь("admin/", admin.site.urls) ] Обратившись за помощью к ChatGPT, он рекомендовал следующий код в моем UpdateView (что вызвало у меня ту же проблему):
def post(request, self, form): print("запрос на публикацию") print("запрос.пост", запрос.POST) если «удалить» в запросе.POST: печать("удалить найденное") вернуть self.delete_entry() еще: print("Инструкция else") #return super(SingleEntryView, self).post(request, form) вернуть super().post(запрос, форма) #return super().post(request, *args, **kwargs) защита delete_entry (сам): запись = self.get_object() печать("получить объект") запись.удалить() messages.success(self.request, «Ваша запись успешно удалена.») вернуть перенаправление("/") Вот мои модели.py:
из моделей импорта django.db из django.core.validators импортировать MinValueValidator, MaxValueValidator из django.urls обратный импорт из django.utils.text импортировать slugify Запись класса (модели.Модель): ONEORB="1-минутный ШАР" FIVEORB="5-минутный шар" ABCD="ABCD" REVERSAL="Разворот" PROFIT="Прибыль" ПОТЕРЯ="Потеря" РЕЗУЛЬТАТ_ВЫБОР = ( (PROFIT, «Прибыль»), (ПОТЕРЯ, «Потеря») ) STRATEGY_CHOICES = ( (ONEORB, «ШАР 1 мин»), (FIVEORB, «ШАР 5 минут»), (ABCD, «ABCD»), (РЕВЕРС, «Разворот») ) enter_date=models.DateField(auto_now_add=True) тикер=models.CharField(max_length=8, default="") Strategy=models.CharField(max_length=12, choice=STRATEGY_CHOICES, default="ONEORB") result=models.CharField(max_length=6, choice=RESULT_CHOICES, default="PROFIT") комментарии = модели.TextField (max_length = 300, пусто = True) image = models.ImageField(upload_to="", null=True, Blank=True) #сохраним в BASE_DIR по умолчанию, который является "загрузками" защита __str__(сам): return f"{self.result} {self.entered_date}"