【问题标题】:How to prevent model instance deletion?如何防止模型实例删除?
【发布时间】:2016-12-12 04:45:29
【问题描述】:

如果is_available_returnedFalse,我想使用一种方法来防止管理员删除SingleBook 实例。逻辑是借书的记录在还书之前不应该被删除。我宁愿以适当的方式处理这个问题,而不是抛出异常。任何帮助将不胜感激。

class SingleBook(models.Model):
    serial_number = models.CharField(primary_key=True , max_length=150, blank=False)
    book_id = models.ForeignKey(LibraryBook, on_delete=models.CASCADE)
    is_available_returned = models.BooleanField(default=True)

    def __unicode__(self):
        return unicode(self.book_id)

PS:

Django==1.9.8
django-material==0.8.0
django-model-utils==2.5.1
psycopg2==2.6.2
wheel==0.24.0

【问题讨论】:

  • 你试过使用 Django 信号的pre_delete 吗?
  • pre_delete 允许添加一些功能,但我会添加哪些功能来防止删除?

标签: django python-2.7 django-models django-admin


【解决方案1】:
from django.core.exceptions import ValidationError
from django.db.models.signals import pre_delete
from django.dispatch import receiver

@receiver(pre_delete, sender=SingleBook)
def delete_is_available_returned(sender, instance, **kwargs):
    if instance.is_available_returned:
       raise Exception('This book cant be deleted')

在信号中引发异常应该会阻止 delete() 方法的执行,同时将异常返回到调用它的位置

【讨论】:

    猜你喜欢
    • 2013-01-07
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 2011-03-20
    • 1970-01-01
    相关资源
    最近更新 更多