Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在django视图中删除对象?_Python_Django - Fatal编程技术网

Python 如何在django视图中删除对象?

Python 如何在django视图中删除对象?,python,django,Python,Django,我有一个模型产品: class Product(models.Model): name = models.CharField(verbose_name="name", max_length=40) cost = models.FloatField(verbose_name="price") def __unicode__(self): return self.name 我创建了一个视图,可以在其中添加新产品,但如何删除这些产品 我的想法是: def d

我有一个模型产品:

class Product(models.Model):
    name = models.CharField(verbose_name="name", max_length=40)
    cost = models.FloatField(verbose_name="price")

    def __unicode__(self):
        return self.name
我创建了一个视图,可以在其中添加新产品,但如何删除这些产品

我的想法是:

def delete_product(request, pk):
    if request.method == "POST":
        if form.is_valid():
            product = form.delete(commit=False)
            product.delete()
            return redirect('homeshop.views.product_list', pk=product.pk)
但是接下来呢?我已将其添加到模板(我可以在其中编辑产品并保存它),但它不起作用:

{{ delete_product }}
现在在我的模板中:

{% block content %}
    <h1>Nowy wydatek</h1>
    <form method="POST" class="product-form">{% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="save btn btn-default">Save</button>
    </form>
{% endblock %}
{%block content%}
诺维维达特克
{%csrf_令牌%}
{{form.as_p}}
拯救
{%endblock%}

您需要执行以下操作:

template.html

{% for product in products %}
{% csrf_token %}
...
<form action="{% url 'delete_product' product.id %}" method="POST">
  <button type="submit">Delete</button>
</form>
...
{% endfor %}
{%用于产品中的产品%}
{%csrf_令牌%}
...
删除
...
{%endfor%}
然后,您需要更新URL.py以定义一个URL,在访问正确的URL时调用删除函数

    url(
        r'^delete/<product_id>$',
        'delete_product',
        name='delete_product'
    )
url(
r“^delete/$”,
“删除产品”,
name='delete_产品'
)

我不知道你的URL.py是如何布局的,所以你的URL看起来可能有点不同。

你需要创建一个链接/按钮/其他一些元素,单击该链接/按钮/其他元素时会调用该视图功能。通过转到特定的URL或使用AJAX。这不是一个链接,而是一个带有method=“POST”的表单。基于GET删除(或修改)数据是一种不好的做法(请参阅)。@Weier Update answer使用带有HTTP
DELETE
方法的表单我想你忘了包含
csrf_令牌
。谢谢你的建议,我在这个模板中添加了这个,我还必须写什么?有趣的是HTML5不支持表单的
DELETE
。在快速搜索之后,我在上找到了一个答案,上面说HTML表单不支持
PUT
DELETE
,基本上是因为没有一个on为它编写了规范。