我想删除一个特定的记录,比如:
delete from table_name where id = 1;
如何在django模型中做到这一点?
我想删除一个特定的记录,比如:
delete from table_name where id = 1;
如何在django模型中做到这一点?
当前回答
您也可以使用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。
其他回答
如果你想删除一个项目
wishlist = Wishlist.objects.get(id = 20)
wishlist.delete()
例如,如果您想删除“愿望列表”中的所有项目
Wishlist.objects.all().delete()
我的做法是:
instance = SomeModel.objects.get(id=1)
instance.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。
如果使用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()
延长沃尔夫投票最多的答案
注意,应该将request作为参数传递给视图中的delete函数。举个例子:
from django.shortcuts import redirect
def delete(request, id):
YourModelName.objects.filter(id=id).delete()
return redirect('url_name')