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

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

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

軟刪除

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

預(yù)備知識

Managers

Managers 是django models 提供的一個(gè)用于提供數(shù)據(jù)庫查詢操作的接口,對于Django應(yīng)用程序中的每個(gè)model都會至少存在一個(gè)Manager

詳細(xì):https://docs.djangoproject.com/en/dev/topics/db/managers/

django實(shí)現(xiàn)軟刪除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="公司名稱")

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Pycharm編輯器功能之代碼折疊效果的實(shí)現(xiàn)代碼

    Pycharm編輯器功能之代碼折疊效果的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Pycharm編輯器功能之代碼折疊效果的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Python 實(shí)現(xiàn)大整數(shù)乘法算法的示例代碼

    Python 實(shí)現(xiàn)大整數(shù)乘法算法的示例代碼

    這篇文章主要介紹了Python 實(shí)現(xiàn)大整數(shù)乘法算法的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 使用PyTorch將文件夾下的圖片分為訓(xùn)練集和驗(yàn)證集實(shí)例

    使用PyTorch將文件夾下的圖片分為訓(xùn)練集和驗(yàn)證集實(shí)例

    今天小編就為大家分享一篇使用PyTorch將文件夾下的圖片分為訓(xùn)練集和驗(yàn)證集實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python用20行代碼實(shí)現(xiàn)批量摳圖功能

    Python用20行代碼實(shí)現(xiàn)批量摳圖功能

    在日常的工作和生活中,我們經(jīng)常會遇到需要摳圖的場景,即便是只有一張圖片需要摳,也會摳得我們不耐煩。本文將為大家分享一個(gè)20行代碼就能實(shí)現(xiàn)是批量摳圖,需要的可以參考一下
    2022-05-05
  • MAC下Anaconda+Pyspark安裝配置詳細(xì)步驟

    MAC下Anaconda+Pyspark安裝配置詳細(xì)步驟

    一般MAC上使用的是zsh的shell工具,需要修改zshrc文件來使環(huán)境變量永久生效(若不修改該文件,在命令行中輸入相應(yīng)的命令即可,本文給大家介紹MAC下Anaconda+Pyspark安裝配置詳細(xì)步驟,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • Python中閉包與lambda的作用域解析

    Python中閉包與lambda的作用域解析

    這篇文章主要介紹了Python中閉包與lambda的作用域解析,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 詳解Python中遞歸函數(shù)的原理與使用

    詳解Python中遞歸函數(shù)的原理與使用

    如果一個(gè)函數(shù),可以自己調(diào)用自己,那么這個(gè)函數(shù)就是一個(gè)遞歸函數(shù)。本文將詳細(xì)講解Python中遞歸函數(shù)的使用與原理,感興趣的可以了解一下
    2022-05-05
  • python面試題之read、readline和readlines的區(qū)別詳解

    python面試題之read、readline和readlines的區(qū)別詳解

    當(dāng)python進(jìn)行文件的讀取會遇到三個(gè)不同的函數(shù),它們分別是read(),readline(),和readlines(),下面這篇文章主要給大家介紹了關(guān)于python面試題之read、readline和readlines區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • anaconda jupyter不能導(dǎo)入安裝的lightgbm解決方案

    anaconda jupyter不能導(dǎo)入安裝的lightgbm解決方案

    這篇文章主要介紹了anaconda jupyter不能導(dǎo)入安裝的lightgbm解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python如何把字符串類型list轉(zhuǎn)換成list

    python如何把字符串類型list轉(zhuǎn)換成list

    這篇文章主要介紹了python如何吧字符串類型list轉(zhuǎn)換成list,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02

最新評論