Python Django:即使阻止删除,也能成功删除邮件 class-SomeModel(models.Model): end=models.DateTimeField() def删除(self、*args、**kwargs): now=datetime.datetime.now() 如果self.end
我已经在我的一个模型中编写了上述代码。 它工作得很好,但有一个问题: 我收到一条消息说,对象被成功删除,即使该模型没有被删除,因为如果我输入的条件 在这种情况下,是否有方法可以发送一条消息,说明对象未被删除Python Django:即使阻止删除,也能成功删除邮件 class-SomeModel(models.Model): end=models.DateTimeField() def删除(self、*args、**kwargs): now=datetime.datetime.now() 如果self.end,python,django,django-admin,Python,Django,Django Admin,我已经在我的一个模型中编写了上述代码。 它工作得很好,但有一个问题: 我收到一条消息说,对象被成功删除,即使该模型没有被删除,因为如果我输入的条件 在这种情况下,是否有方法可以发送一条消息,说明对象未被删除 注意:此模型仅适用于django管理员。您可以从覆盖的delete()返回True或False,只需在表单中使用该值即可生成消息 class SomeModel(models.Model): end = models.DateTimeField() def delete(s
注意:此模型仅适用于django管理员。您可以从覆盖的delete()返回True或False,只需在表单中使用该值即可生成消息
class SomeModel(models.Model):
end = models.DateTimeField()
def delete(self, *args, **kwargs):
now = datetime.datetime.now()
if self.end < now:
return # past events cannot be deleted
super(SomeModel, self).delete(self, *args, **kwargs)
def delete(self,*args,**kwargs):
now=datetime.datetime.now()
如果self.end<现在:
返回False#无法删除过去的事件
super(SomeModel,self).删除(self,*args,**kwargs)
返回True#已成功从数据库中删除
django admin中的delete视图不会检查delete()
调用是否成功,因此,如果您希望覆盖问题中的delete方法,则需要覆盖整个方法
如果SomeModel
仅在Django管理中使用,另一种可能的方法是重写该方法。这将从更改视图中删除删除链接,并禁用过去事件的删除页面
def delete(self, *args, **kwargs):
now = datetime.datetime.now()
if self.end < now:
return False # past events cannot be deleted
super(SomeModel, self).delete(self, *args, **kwargs)
return True #successfully deleted from the database
class-SomeModelAdmin(admin.ModelAdmin):
...
def具有删除权限(self、request、obj=None):
"""
对于过去发生的事件返回False
"""
如果obj为无:
#obj在模型管理变更列表视图中为无
返回错误
now=datetime.datetime.now()
如果obj.end<现在:
返回False#无法删除过去的事件
其他:
return super(SomeModelAdmin,self)。具有删除权限(请求,obj)
上面的实现将禁用“删除选定对象”,因为当obj为None时,我们返回False。无论如何,你应该考虑这样做,因为它调用QuelSeSET删除方法,而不是重写删除方法。
使用这种方法,超级管理员仍然能够删除事件,因为他们拥有所有权限。如果
SomeModel
出现在模型内联中,我认为这种方法不起作用——尽管我看到在Django 1.4中has\u delete\u权限是inlinemodeldadmin
选项。这也不起作用。我以前试过这个。如果有帮助的话,我正在使用Django 1.3.1。我不确定这是否可行,因为显示消息的代码没有检查来自delete
的返回值。谢谢。这是一次拯救。我决定重写has_delete_权限,因为我只在admin中使用它。我已重写get_action()以禁用“删除选定对象”操作。所以这不是我的问题。
class SomeModelAdmin(admin.ModelAdmin):
...
def has_delete_permission(self, request, obj=None):
"""
Return False for events in the past
"""
if obj is None:
# obj is None in the model admin changelist view
return False
now = datetime.datetime.now()
if obj.end < now:
return False # past events cannot be deleted
else:
return super(SomeModelAdmin, self).has_delete_permission(request, obj)