【问题标题】:Django DeleteView don't delete the object from dataDjango DeleteView 不会从数据中删除对象
【发布时间】:2019-04-22 04:50:45
【问题描述】:

首先感谢您的宝贵时间。 我刚刚学习了 CreateView UpdateView 和 DeleteView 模型。我让他们都工作了。我可以更改我的对象,我可以删除它们,但是在删除一个对象后,我尝试创建另一个对象并创建一个像之前没有被删除的对象。给我以下之前删除的pk

虽然此时的 pk 应该是 3,但它仍然会创建 de 对象,我认为在我单击 de 删除按钮并确认删除后它不会从数据中删除。

这些是我的模型:

> 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

我的意见.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 html mysql django sql-delete


    【解决方案1】:

    DeleteView 仅在 POST 时删除您的对象,而不是 GET。因此,您需要在表单中使用method="post",因为 GET 会再次呈现此 confirm_delete.html。

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

    如果您可以通过 GET 进入 DeleteView,那么您只需 POST 即可使用 action=""。

    【讨论】:

    • 真正的问题是,在 url 上它给了我 de id 就像我在没有被删除之前删除的那些是未来的问题吗?
    • 我很确定如果你不使用method="post",你的对象不会去任何地方。好吧,对于另一个问题,您不太可能拥有与以前相同的 id。你用的是什么数据库?我完全不记得 django 曾经使用过相同的 pk。
    • 是的,没有方法你可以做到这一点,但必须创建一个confirm_delete.html,我试图重定向到相同的索引页面whitout confirm_template,并且你的回答是可能的。关于pk,是这样吗?在我创建且从未删除的第一个 2 之后,我的 url 应该显示一个像 14 或 15 这样的数字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2020-05-03
    • 2017-06-10
    • 1970-01-01
    相关资源
    最近更新 更多