欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

django之自定義軟刪除Model的方法

 更新時間:2019年08月14日 16:10:28   作者:我愛學python  
這篇文章主要介紹了django之自定義軟刪除Model的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

軟刪除

簡單的說,就是當執(zhí)行刪除操作的時候,不正真執(zhí)行刪除操作,而是在邏輯上刪除一條記錄。這樣做的好處是可以統(tǒng)計數據,可以進行恢復操作等等。

預備知識

Managers

Managers 是django models 提供的一個用于提供數據庫查詢操作的接口,對于Django應用程序中的每個model都會至少存在一個Manager

詳細:https://docs.djangoproject.com/en/dev/topics/db/managers/

django實現軟刪除model

firstly,

from django.db import models
from django.db.models.query import QuerySet

# 自定義軟刪除查詢基類
class SoftDeletableQuerySetMixin(object):
  """
  QuerySet for SoftDeletableModel. Instead of removing instance sets
  its ``is_deleted`` field to True.
  """

  def delete(self):
    """
    Soft delete objects from queryset (set their ``is_deleted``
    field to True)
    """
    self.update(is_deleted=True)


class SoftDeletableQuerySet(SoftDeletableQuerySetMixin, QuerySet):
  pass


class SoftDeletableManagerMixin(object):
  """
  Manager that limits the queryset by default to show only not deleted
  instances of model.
  """
  _queryset_class = SoftDeletableQuerySet

  def get_queryset(self):
    """
    Return queryset limited to not deleted entries.
    """
    kwargs = {'model': self.model, 'using': self._db}
    if hasattr(self, '_hints'):
      kwargs['hints'] = self._hints

    return self._queryset_class(**kwargs).filter(is_deleted=False)


class SoftDeletableManager(SoftDeletableManagerMixin, models.Manager):
  pass

secondly,

# 自定義軟刪除抽象基類
class SoftDeletableModel(models.Model):
  """
  An abstract base class model with a ``is_deleted`` field that
  marks entries that are not going to be used anymore, but are
  kept in db for any reason.
  Default manager returns only not-deleted entries.
  """
  is_deleted = models.BooleanField(default=False)

  class Meta:
    abstract = True

  objects = SoftDeletableManager()

  def delete(self, using=None, soft=True, *args, **kwargs):
    """
    Soft delete object (set its ``is_deleted`` field to True).
    Actually delete object if setting ``soft`` to False.
    """
    if soft:
      self.is_deleted = True
      self.save(using=using)
    else:
      return super(SoftDeletableModel, self).delete(using=using, *args, **kwargs)

class CustomerInfo(SoftDeletableModel):
  nid = models.AutoField(primary_key=True)
  category = models.ForeignKey("CustomerCategory", to_field="nid", on_delete=models.CASCADE, verbose_name='客戶分類',
                 db_constraint=False)
  company = models.CharField(max_length=64, verbose_name="公司名稱")

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:

相關文章

  • 基于pytorch 預訓練的詞向量用法詳解

    基于pytorch 預訓練的詞向量用法詳解

    今天小編就為大家分享一篇基于pytorch 預訓練的詞向量用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • OpenCV圖像形態(tài)學的實現

    OpenCV圖像形態(tài)學的實現

    本文主要介紹了OpenCV圖像形態(tài)學的實現,包括腐蝕、膨脹、開運算、閉運算、梯度運算、頂帽運算和黑帽運算,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2025-04-04
  • OpenCV半小時掌握基本操作之圖像梯度

    OpenCV半小時掌握基本操作之圖像梯度

    這篇文章主要介紹了OpenCV基本操作之圖像梯度,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Python統(tǒng)計分析模塊statistics用法示例

    Python統(tǒng)計分析模塊statistics用法示例

    這篇文章主要介紹了Python統(tǒng)計分析模塊statistics用法,結合實例形式分析了Python統(tǒng)計分析模塊statistics計算平均數、中位數、出現次數、標準差等相關操作技巧,需要的朋友可以參考下
    2019-09-09
  • Python調用Java數據接口實現CRUD操作的詳細指南

    Python調用Java數據接口實現CRUD操作的詳細指南

    Python和Java作為兩種流行的編程語言,在企業(yè)級應用中常常需要實現跨語言的數據交互,下面我們就來看看如何在Django Python項目中調用Java數據接口實現CRUD操作吧
    2025-04-04
  • 淺談keras中的batch_dot,dot方法和TensorFlow的matmul

    淺談keras中的batch_dot,dot方法和TensorFlow的matmul

    這篇文章主要介紹了淺談keras中的batch_dot,dot方法和TensorFlow的matmul,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Spring異常處理?bug的問題記錄(同一份代碼,結果卻不一樣)

    Spring異常處理?bug的問題記錄(同一份代碼,結果卻不一樣)

    這篇文章主要介紹了Spring異常處理?bug的問題記錄(同一份代碼,結果卻不一樣)的相關資料,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-05-05
  • 利用numpy實現一、二維數組的拼接簡單代碼示例

    利用numpy實現一、二維數組的拼接簡單代碼示例

    這篇文章主要介紹了利用numpy實現一、二維數組的拼接簡單代碼示例,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Python簡單的制作圖片驗證碼實例

    Python簡單的制作圖片驗證碼實例

    本篇文章主要介紹了Python簡單的制作圖片驗證碼實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Python函數參數類型*、**的區(qū)別

    Python函數參數類型*、**的區(qū)別

    這篇文章主要介紹了Python函數參數類型*、**的區(qū)別,本文用實例講解它們的區(qū)別,并講解了閉包的相關知識,需要的朋友可以參考下
    2015-04-04

最新評論