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

use*_*795 227 python django django-models

我想删除一个特定的记录.如

delete from table_name where id = 1;
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做django model呢?

Wol*_*lph 449

有两种方法:

要直接删除它:

SomeModel.objects.filter(id=id).delete()
Run Code Online (Sandbox Code Playgroud)

要从实例中删除它:

instance = SomeModel.objects.get(id=id)
instance.delete()
Run Code Online (Sandbox Code Playgroud)

  • 请注意,第一个不会调用对象的.delete()方法,因此如果在该方法中有"清理"代码,则不会调用该方法.一般不是问题,但值得记住. (42认同)
  • @Matthew Schinckel:这是事实.如果你想要一个自定义删除方法,而不是你应该使用`pre_delete`或`post_delete`信号. (8认同)
  • 您可以使用`delete()`的返回值来检查您要删除的内容.它返回一个包含已删除对象计数的元组和一个包含已删除类型详细信息的字典,例如`(1,{'yourapp.SomeModel':1})`. (3认同)
  • 我不知道在DJango 1.4之后是什么情况,但这实际上是获取所有PK然后被那些PK删除.因此,例如,如果您通过任意字段删除,这可能比SQL对应物慢...... :( (2认同)

Mil*_* Kh 29

MyModel.objects.get(pk=1).delete()
Run Code Online (Sandbox Code Playgroud)


小智 24

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

entry= Account.objects.get(id= 5)
entry.delete()
Run Code Online (Sandbox Code Playgroud)

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

entries= Account.objects.all()
entries.delete()
Run Code Online (Sandbox Code Playgroud)


lil*_*mad 15

如果要删除一项

wishlist = Wishlist.objects.get(id = 20)
wishlist.delete()
Run Code Online (Sandbox Code Playgroud)

例如,如果您想删除愿望清单中的所有项目

Wishlist.objects.all().delete()
Run Code Online (Sandbox Code Playgroud)


小智 9

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

例子:

删除一条记录:

data_to_be_deleted = Modelname.objects.get(fieldname = value)
data_to_be_deleted.delete()
Run Code Online (Sandbox Code Playgroud)

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

根据条件删除多条记录:

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

data_to_be_deleted = Modelname.objects.filter(fieldname = value)
data_to_be_deleted.delete()
Run Code Online (Sandbox Code Playgroud)

删除所有记录:

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

data_to_be_deleted = Modelname.objects.all()
data_to_be_deleted.delete()
Run Code Online (Sandbox Code Playgroud)

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


Kha*_*har 6

延长投票最高的答案。

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

from django.shortcuts import redirect


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

return redirect('url_name')
Run Code Online (Sandbox Code Playgroud)