我想删除一个特定的记录,比如:

delete from table_name where id = 1;

如何在django模型中做到这一点?


当前回答

MyModel.objects.get(pk=1).delete()

如果具有指定主键的对象不存在,这将引发异常,因为它首先尝试检索指定的对象。

MyModel.objects.filter(pk=1).delete()

如果具有指定主键的对象不存在,它不会引发异常,而是直接产生查询

DELETE FROM my_models where id=1

其他回答

延长沃尔夫投票最多的答案

注意,应该将request作为参数传递给视图中的delete函数。举个例子:

from django.shortcuts import redirect


def delete(request, id):
YourModelName.objects.filter(id=id).delete()

return redirect('url_name')

我的做法是:

instance = SomeModel.objects.get(id=1)

instance.delete()

对我来说,这看起来很容易理解,这就是我使用这种方法的原因。

如果您想删除一个实例,那么请编写代码

entry= Account.objects.get(id= 5)
entry.delete()

如果你想删除所有实例,然后写代码

entries= Account.objects.all()
entries.delete()

如果你想删除一个项目

wishlist = Wishlist.objects.get(id = 20)
wishlist.delete()

例如,如果您想删除“愿望列表”中的所有项目

Wishlist.objects.all().delete()

您也可以使用get_object_or_404(),而不是直接使用get(),因为在使用get()时,我们显式地引发404错误。

但是,在使用get_object_or_404时,它是自动完成的。

根据4.0文档,在给定的模型管理器上调用get(),但它会引发Http404而不是模型的DoesNotExist异常。

像这样使用它:

批量删除:

AnyModel.objects.filter(id=id).delete()

如果要删除单个实例,请使用get_object_or_404()代替get(),如下所示:

instance=get_object_or_404(anyModel,id=id)
instance.delete()

如果,未找到则自动引发404。