码农行者 码农行者
首页
  • Python

    • 语言特性
    • Django相关
    • Tornado
    • Celery
  • Golang

    • golang学习笔记
    • 对比python学习go
    • 模块学习
  • JavaScript

    • Javascript
  • 数据结构预算法笔记
  • ATS
  • Mongodb
  • Git
云原生
运维
垃圾佬的快乐
  • 数据库
  • 机器学习
  • 杂谈
  • 面试
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

DeanWu

软件工程师
首页
  • Python

    • 语言特性
    • Django相关
    • Tornado
    • Celery
  • Golang

    • golang学习笔记
    • 对比python学习go
    • 模块学习
  • JavaScript

    • Javascript
  • 数据结构预算法笔记
  • ATS
  • Mongodb
  • Git
云原生
运维
垃圾佬的快乐
  • 数据库
  • 机器学习
  • 杂谈
  • 面试
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Python

    • 语言特性

    • Django

      • Django 简单入门及最佳实践
      • Django学习笔记-url、视图
      • Django学习笔记-模型(1)模型的定义
      • Django学习笔记-模型(2)模型的操作
      • Django学习笔记-模板
      • Django 文章整理- 学习路径总结
      • Django 3.0 异步试用分享
      • Django 3.2 新功能尝鲜
      • Django admin 定制案例
      • Django 三个异步使用的案例
      • Django学习笔记- Class View
      • django 相关命令总结
      • django form表单的数据 select 值更新问题
      • Django自定义管理器(objects)后遇到的问题
        • django signal 使用总结
        • 单文件 Django 服务构建
        • 使用 supervisor 来监控 django celery
        • Django 中如何使用 sass
        • Django uwsgi 启动问题 unavailable modifier requested 0
        • Django uwsgi 启动问题 ImportError No module named os
      • Best.Practices.for.Django

      • Djangorestfulframework

      • Celery

      • Tornado

      • Flask

      • FastApi

      • virtualenv

    • Golang

    • Javascript

    • 开发语言
    • Python
    • Django
    DeanWu
    2016-04-20
    目录

    Django自定义管理器(objects)后遇到的问题

    # 管理器自定义简介

    django model 的管理器 objects 允许我们自定义,这大大的扩展了model的可用性。

    例如,使用这个特性来软删除。设置一个状态字段,在自定义的objects 中重写 get_queryset 来过滤状态。这样以后我们使用objects来查询model 的数据时,便会自动过滤状态。

    
    from django.db import models
    
    
    class aManager(models.Manager):
        def get_queryset(self):
            return super(aManager, self).get_queryset().filter(isactive=True)
    
    
    class A(models.Model):
        name = models.CharField(max_length=100)
        isactive = models.BooleanField()
    
        objects = aManager()
    
        def __unicode__(self):
            return '%s' % self.name
    
    
    class B(models.Model):
        name = models.CharField(max_length=100)
        a = models.ForeignKey(A)
    
        def __unicode__(self):
            return '%s' % self.name
            
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26

    其他 管理器的使用可见 官方文档。

    # 问题

    今天遇到一个问题,如上的模型实例,数据如下:

    通过 A 的关联条件查询 B 时,并没有过滤掉 A中状态。

    如下:

    可以从 sql 看出,并没有对A 的状态进行过滤。

    所以,此处注意。

    # 结论

    以后级联建议尽量使用唯一索引来过滤。

    #Django#Django-model
    上次更新: 2023/03/28, 16:27:19
    django form表单的数据 select 值更新问题
    django signal 使用总结

    ← django form表单的数据 select 值更新问题 django signal 使用总结→

    最近更新
    01
    chromebox/chromebook 刷bios步骤
    03-01
    02
    redis 集群介绍
    11-28
    03
    go语法题二
    10-09
    更多文章>
    Theme by Vdoing | Copyright © 2015-2024 DeanWu | 遵循CC 4.0 BY-SA版权协议
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式