Django DeleteView не удаляет объект из данных

прежде всего спасибо за ваше время. я только что изучил модели CreateView, UpdateView и DeleteView. и я заставил их всех работать. Я могу изменить свой объект, я могу удалить их, но после удаления объекта я пытаюсь создать другой и создаю тот, который раньше не был удален. давая мне следующий pk из удаленных ранее

он по-прежнему создает объект de, хотя pk на данный момент должен быть 3, я думаю, после того, как я нажму кнопку удаления и подтвердю удаление, он не удаляется из данных.

Это мои модели:

> from django.db import models from django.urls import reverse
> 
> 
> 
> class Dreams (models.Model):
>     titulo = models.CharField(max_length=100)
>     objetivo = models.CharField(max_length=100)
>     imagem = models.CharField(max_length=100)
> 
>     def get_absolute_url(self):
>         return reverse ('webdeve:index', kwargs = {'pk': self.pk})
> 
>     def __str__(self):
>         return self.titulo + ' - ' + self.objetivo
> 
> 
> class Wich (models.Model):
>     lets = models.ForeignKey(Dreams, on_delete=models.CASCADE)
>     make = models.CharField(max_length=100)
>     it = models.CharField(max_length=100)
>     favorite = models.BooleanField(default=False)
> 
>     def __str__(self):
>         return self.make

мой views.py:

from django.views import generic
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from .models import Dreams, Wich
from django.urls import reverse_lazy


class IndexView (generic.ListView):
    template_name = 'index.html'

    def get_queryset(self):
        return Dreams.objects.all()

class DetailView (generic.DetailView):
    model = Dreams
    template_name = 'detail.html'

class DreamCreate (CreateView):
    model = Dreams
    fields = ['titulo', 'objetivo', 'imagem']
    template_name = 'dreams_form.html'


class DreamUpdate (UpdateView):
    model = Dreams
    fields = ['titulo', 'objetivo', 'imagem']
    template_name = 'dreams_form.html'

class DreamDelete (DeleteView):
    model = Dreams
    template_name= ('dreams_confirm_delete.html')
    success_url= reverse_lazy('webdeve:index')

мой urls.py:

from django.conf.urls import url
from webdeve import views

app_name = 'webdeve'

# Dreams

urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),

# Dreams/detail

    url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'),

# Dreams/detail/add
    url(r'^dream/add/$', views.DreamCreate.as_view(), name='dream-add'),

# Dreams/detail/Update

    url(r'^dream/(?P<pk>[0-9]+)/$', views.DreamUpdate.as_view(), name='dreams-uptdate'),
# Dreams/detail/detete

    url(r'^dream/(?P<pk>[0-9]+)/delete/$', views.DreamDelete.as_view(), name='dreams-delete'),

]

И мой index.html с кнопкой удаления:

<!-- linkando css no html -->
{% extends 'base.html' %}
{% block nav %}

      <ul>
        {% for Dreams in object_list %}
            <a href = "{% url 'webdeve:detail' Dreams.id %}"><img src = {{ Dreams.imagem }}></a>
            <li><a href = "{% url 'webdeve:detail' Dreams.id %}"> {{ Dreams.titulo }} - {{ Dreams.objetivo }} </a><li>

            <!--delete BUTTON-->

              <form action = "{% url 'webdeve:dreams-delete' Dreams.id %}">
                {% csrf_token %}
                <input type = "hidden" name = "dreams_id" value = "{{ Dreams.id }}" method = "post" style = "display: inline" >
                <button type = "submit" class = "btn btn-default btn-sm">
                  <span class = "glyphicon glyphicon-trash"></span>
                </button>
              </form>
        {% endfor %}
      </ul>
{% endblock %}
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
1 287
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

DeleteView удаляет ваш объект только при POST, но не GET. В результате вам нужно использовать method = "post" в своей форме, поскольку GET снова отобразит этот confirm_delete.html.

<form method = "post" action = "">
...
</form>

Если вы можете войти в DeleteView при GET, action = "" - это все, что вам нужно для POST.

настоящая проблема заключается в том, что на URL-адресе он дает мне идентификатор, как те, которые я удалил раньше, не были удалены, это проблема на будущее?

lucasrf27 19.11.2018 20:45

Я почти уверен, что если вы не используете method = "post", ваш объект никуда не денется. Ну, по другому вопросу, маловероятно, что у вас будет тот же идентификатор, что и раньше. Какую базу данных вы используете? Я не могу вспомнить, чтобы django когда-либо использовал тот же pk.

sipp11 19.11.2018 20:53

да, без метода вы можете это сделать, но нужно создать confirm_delete.html, и я пытался перенаправить на ту же индексную страницу без confirm_template, и с вашим ответом это было возможно. насчет ПК, это правда? мой URL-адрес должен показывать мне число вроде 14 или 15 после первых 2, которые я создал и никогда не удалял.

lucasrf27 19.11.2018 21:48

Другие вопросы по теме