• django 重写update,create,delete方法


    话不多说,直接上代码吧:

    from django.db import models
    
    from datetime import datetime
    from django.db import models
    # from DjangoUeditor.models import UEditorField
    
    from django.db.models.query import QuerySet
    
    # Create your models here.
    
    # 重写QuerySet
    class CustomQuerySet(QuerySet):
        def update(self, **kwargs):
            print('=====================', kwargs)
            return super().update(**kwargs)
    
        def create(self, *args, **kwargs):
            print('==========create')
            return super().create(*args, **kwargs)
    
        def delete(self):
            print('==========delete')
            return super().delete()
    
    # 重写对象管理类
    class CategoryManager(models.Manager):
        def get_queryset(self):
            return CustomQuerySet(self.model, using=self._db)
    
    
    class GoodsCategory(models.Model):
        """
        商品分类
        """
        CATEGORY_TYPE = (
            (1, "一级类目"),
            (2, "二级类目"),
            (3, "三级类目"),
        )
    
        name = models.CharField('类别名', default="", max_length=30, help_text="类别名")
        code = models.CharField("类别code", default="", max_length=30, help_text="类别code")
        desc = models.TextField("类别描述", default="", help_text="类别描述")
        # 目录树级别
        category_type = models.IntegerField("类目级别", choices=CATEGORY_TYPE, help_text="类目级别")
        # 设置models有一个指向自己的外键
        parent_category = models.ForeignKey("self", on_delete=models.CASCADE, null=True, blank=True, verbose_name="父类目级别",
                                            help_text="父目录",
                                            related_name="sub_cat")
        is_tab = models.BooleanField("是否导航", default=False, help_text="是否导航")
        add_time = models.DateTimeField("添加时间", default=datetime.now)
        # 设置对象管理类
        objects = CategoryManager()
    
        class Meta:
            verbose_name = "商品类别"
            verbose_name_plural = verbose_name
    
        def __str__(self):
            return self.name
    
    

    主要重写了两个类:

    1. CategoryManager
    2. CustomQuerySet
    3. objects = CategoryManager()

    测试结果:

    In [1]: from test01.models import GoodsCategory
    
    In [2]: GoodsCategory.objects.all()
    Out[2]: <CustomQuerySet [<GoodsCategory: luojun>]>
    
    In [3]: GoodsCategory.objects.all().create(name='123')
    ==========create
    
    In [4]: GoodsCategory.objects.all().delete()
    ==========delete
    
    In [5]: GoodsCategory.objects.create(name='123')
    ==========create
    >>> GoodsCategory.objects.all().update(name='123')
    ===================== {'name': '123'}
    1
    
    

    注:测试的时候没有回调super方法,所以没有返回结果

    save 方法需要在模型内重写

  • 相关阅读:
    jhat:虚拟机堆转储快照分析工具
    jmap:java内存影像工具
    jinfo:Java配置信息工具
    jstat:虚拟机统计信息监视工具
    jps:虚拟机进程状况工具
    jdk工具总领
    到底是"/"还是"/*"
    jdk_keytool
    html地图定位
    java 手机号码归属地查询
  • 原文地址:https://www.cnblogs.com/qianxunman/p/13607897.html
Copyright © 2020-2023  润新知