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为它编写了规范。