如何删除Django模型中的记录?

时间:2010-09-27 16:48:07

标签: python django django-models

我想删除特定记录。如

delete from table_name where id = 1;

如何在django model

中执行此操作

9 个答案:

答案 0 :(得分:401)

有几种方法:

直接删除它:

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

要从实例中删除它:

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

答案 1 :(得分:19)

如果要删除一个实例,请编写代码

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

如果要删除所有实例,请编写代码

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

答案 2 :(得分:12)

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

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

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

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

DELETE FROM my_models where id=1

答案 3 :(得分:4)

Wolph提供了一个很好的答案集中代码。我可以在这里粘贴官方doc,供大家参考。

答案 4 :(得分:4)

延长投票最高的答案。

请注意,您应该将请求作为参数传递给视图中的删除函数。一个例子是:

from django.shortcuts import redirect


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

return redirect('url_name')

答案 5 :(得分:3)

delete() 方法用于从数据库中删除模型实例。该方法立即删除对象。此方法返回删除的对象数。

示例:

**

  • 删除一条记录:

**

data_to_be_deleted = Modelname.objects.get(fieldname = value)
data_to_be_deleted.delete()

由于 get 方法从查询集中返回单个对象,只会删除单个记录。如果提供的值不存在,这将引发错误。如果表中有多个记录具有相同的值,那么它也会引发错误,因此好的做法是在使用 get 时使用单个唯一值。

**

  • 根据条件删除多条记录:

**

对于基于条件的删除过滤器方法用于查询集,然后调用删除。

data_to_be_deleted = Modelname.objects.filter(fieldname = value)
data_to_be_deleted.delete()

**

  • 删除所有记录:

**

要从数据库表中删除所有模型实例/记录,您需要对所有模型调用 delete 方法

data_to_be_deleted = Modelname.objects.all()
data_to_be_deleted.delete()

注意:代码可以单行编写为 Modelname.objects.all().delete() 但为了清楚理解我使用了多行。

答案 6 :(得分:1)

如果您要删除一项

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

例如,如果您要删除“收藏夹”中的所有项目

Wishlist.objects.all().delete()

答案 7 :(得分:0)

您可以直接从管理面板中删除对象,或者也可以通过键入 python3 manage.py shell(Linux 中的 python3)从交互式 shell 中删除特定或选定的 id 的选项。 如果您希望用户通过浏览器(带有提供的可视化界面)删除对象,例如对于数据库中 ID 为 6 的员工,我们可以使用以下代码实现这一点, emp = employee.objects.get(id=6).delete()

这将删除 ID 为 6 的员工。

如果您希望删除数据库中存在的所有员工而不是 get(),请按如下方式指定 all(): 员工.objects.all().delete()

答案 8 :(得分:0)

就像调用以下一样简单。

SomeModel.objects.get(pk=1).delete()
# Or
SomeModel.objects.filter(pk=1).delete()

# SQL equivalent
# delete from table_name where id = 1;

如果您想根据 id 删除多条记录, 使用 __in 查询 lookup

SomeModel.objects.fitler(pk__in=[1,2,3,4,5,...]).delete()

# SQL equivalent
# delete from table_name where id in (1,2,4,5,...);

如果要删除所有记录,请使用 .all() 检索所有查询, 然后.delete()

SomeModel.objects.all().delete()

# SQL equivalent
# delete from table_name;