Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:即使阻止删除,也能成功删除邮件 class-SomeModel(models.Model): end=models.DateTimeField() def删除(self、*args、**kwargs): now=datetime.datetime.now() 如果self.end_Python_Django_Django Admin - Fatal编程技术网

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)