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

delete from table_name where id = 1;

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


当前回答

如果使用get(),而数据不存在,则会导致错误。在这种情况下,可以使用get_object_or_404自动处理错误。然而,get_object_or_404的问题在于,它在获得所需对象之前过滤所有数据,这对于大型数据集来说效率很低。为了避免这种情况,你可以使用一个自定义方法,比如下面的例子:

class CustomException(APIException):
    status_code = 400
    default_detail = 'Custom exception occurred'

def get_object_or_raise(model, **kwargs):
    try:
        return model.objects.get(**kwargs)
    except model.DoesNotExist:
        raise CustomException({'error': f"{model.__name__} with {kwargs} does not exist"})

当你想要得到的时候你可以做到

instance = get_object_or_raise(anyModel, id=id)
instance.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 ()

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

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

from django.shortcuts import redirect


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

return redirect('url_name')

如果你想删除一个项目

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

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

Wishlist.objects.all().delete()

它就像调用下面的代码一样简单。

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

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

如果您想根据id删除多条记录, 使用__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;