我想删除一个特定的记录,比如:
delete from table_name where id = 1;
如何在django模型中做到这一点?
有几种方法:
直接删除:
SomeModel.objects.filter(id=id).delete()
从实例中删除:
instance = SomeModel.objects.get(id=id) instance.delete()
MyModel.objects.get(pk=1).delete()
如果具有指定主键的对象不存在,这将引发异常,因为它首先尝试检索指定的对象。
MyModel.objects.filter(pk=1).delete()
如果具有指定主键的对象不存在,它不会引发异常,而是直接产生查询
DELETE FROM my_models where id=1
如果你想删除一个项目
wishlist = Wishlist.objects.get(id = 20) wishlist.delete()
例如,如果您想删除“愿望列表”中的所有项目
Wishlist.objects.all().delete()
如果您想删除一个实例,那么请编写代码
entry= Account.objects.get(id= 5) entry.delete()
如果你想删除所有实例,然后写代码
entries= Account.objects.all() entries.delete()
你可以直接从管理面板中删除对象,或者也可以通过输入python3 manage.py shell (Linux中的python3)从交互式shell中删除特定或选定的id。 如果你想让用户通过浏览器(提供可视化界面)删除对象,例如,从数据库中删除ID为6的员工,我们可以用以下代码实现这一点: Emp = employee.objects.get(id=6).delete()
这将删除ID为6的员工。
如果你想删除数据库中存在的所有雇员,而不是get(),指定all()如下所示: employee.objects.all () delete () < / p >
通过wolph扩展投票最多的答案
注意,应该将request作为参数传递给视图中的delete函数。举个例子:
from django.shortcuts import redirect def delete(request, id): YourModelName.objects.filter(id=id).delete() return redirect('url_name')
它就像调用下面的代码一样简单。
SomeModel.objects.get(pk=1).delete() # Or SomeModel.objects.filter(pk=1).delete() # SQL equivalent # delete from table_name where id = 1;
如果你想根据id删除多条记录, 使用__in查询查找
__in
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;
delete()方法用于从数据库中删除模型实例。该方法立即删除对象。此方法返回已删除对象的编号。
delete()
例子:
删除一条记录:
data_to_be_deleted = Modelname.objects.get(fieldname = value) data_to_be_deleted.delete()
当get方法从queryset返回单个对象时,只有单个记录将被删除。如果所提供的值不存在,将抛出一个错误。如果在表中有多个lpe记录具有相同的值,那么它也会抛出一个错误,所以在使用get时使用一个唯一的值是一个良好的实践。
用于按条件删除多条记录:
对于基于条件的删除过滤方法用于queryset,然后调用delete。
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()这样的单行,但为了更清楚地理解,我使用了多行。
Modelname.objects.all().delete()
我的做法是:
instance = SomeModel.objects.get(id=1) instance.delete()
对我来说,这看起来很容易理解,这就是我使用这种方法的原因。
你也可以使用get_object_or_404(),而不是直接使用get(),因为在使用get()时,我们会显式地引发404错误。
get_object_or_404()
get()
但是,在使用get_object_or_404时,它是自动完成的。
get_object_or_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。