Code前端首页关于Code前端联系我们

django 模型下的重写方法和对象模型管理器示例

terry 2年前 (2023-09-24) 阅读数 63 #后端开发

Django 自定义管理器和模型继承

我编写代码时设置的许多数据库都需要一些常用字段,如 is_active、create_time 等。 Field所以我们可以创建基类模型

模型继承

要创建基类模型我们可以充分利用oop函数。以后的所有模型都会继承这个类,所以不需要给每个类添加额外的字段。

12345678910111213141516171819BaseModel(模型.Model):is_active= models.BooleanField(默认)' ' 指定该类为抽象模型类,该模型不会生成表 '''' 抽象 = true ''元属性可以被覆盖。如果不重写,基类元将被继承。 ''' '子模型'

覆盖 Django 的 model.objects

当我们使用 model.objects.filter() 时,我们经常过滤 is_active=False,但是我们的每个过滤器(is_active=True)都必须这样写,所以我们可以重写这个过滤方法,让它每次都从自身过滤。这里可以看到django源码

1234567891011121314151617181920212223242526272829#这里就不提取源码了。我们可以看到django设置了该类的实例对象对应的objects属性class Manager(BaseManager.from_queryset(QuerySet)):''''o对象为该类的实例对象。我们可以看到这个类实际上继承自QuerySet类。方法, 这样,我们就可以直接重写这个类方法,重写filter方法 '''' def filter ​​(自己 , *args, **kwargs):""" 我们可以在 QuerySet 中看到这个过滤方法和except 方法都是调用这个方法,这个方法的内部实现大家可以自行查看,可以使用kwargs中的参数 False, *args, **kwargs)MyManager(models.Manager):def 过滤器自我* args、*、*kwargs) : a a a a a a a a a a 过滤器函数's'有一个返回值,所以我们返回的结果超级返回的结果超级即将到来。出去吧,我们只需要在kwargs中添加参数即可 ''' if not kwargs.get('is_active', True): # 查看所有数据,kwargs.get() 'is_active', ) ' is_active'] =   返回超级(AddressManager ,自己)。筛选准备使用#我们可以将这些对象编写在基类中,以便所有模型都具有此方法。怎么用要看情况,模型也可以多次继承。如果你有特殊的应用,可以在百度或谷歌上搜索。这里只是简单的介绍一下。对象的概念,很多地方我们可以继承已有的框架类,重写类中的方法,这使得我们的代码更加Pythonic。autoField:根据实际ID自动递增的IntegerField。通常不指定。如果不指定,主键字段会自动添加到模型中

CharField (max_length=字符长度):字符串。默认好评样式为 TextInput

TextField:大文本字段,通常超过 4000 时使用,默认表单控件为 Textarea

IntegerField:Integer

DecimalField(max_digits=None,decimal_places = None ): Python十进制实例表示的十进制浮点数

参数说明: DecimalField.max_digits----总位数
DecimalField.decimal_places---小数点的位数

FloatField:表示的数字浮点数实例通过Python float实例

BooleanField:True/False字段,识别该字段的默认控件是CheckboxInput

NullBooleanField:支持三个值Null、True、False

DateField([auto_now= False, auto_now_add=False ] ): 使用Python日期实例 time.date 表示日期

参数说明:
DateField.auto_now
每次保存对象时,该字段会自动设置为当前时间,用于“最后修改时间” " 时间戳
始终使用当前日期,默认为 False

DateField.auto_now_add

当前对象第一次创建时自动设置,用于创建时间戳,

始终使用当前日期,默认为False

说明
该字段对应的默认表单控件是文本输入。在管理站点中添加了 JavaScript
日历控件和“今天”快捷按钮,包括附加错误消息键
invalid_date
注意
auto_now_add、auto_ now 和 default 这些设置会交互排除、任意它们之间的组合
会产生错误的结果

TimeField:使用Python的datetime。time实例代表时间,参数相同 DateField

DateTimeField:使用Python的datetime,datetime实例代表日期和时间,参数是与 DateField 相同

FileField:文件上传字段

ImageField:继承所有 FileField 属性和方法,但检查加载的对象以确保它是有效的图像

字段选项

概述:通过您可以实现的字段选项对字段对象中关键字参数指定的字段进行约束

null:如果为 True,Django 会将数据库中存储的 NULL 值清空,默认值为 False

blank:如果为 True,则字段允许为空,默认为False

注:null是数据库类别中的概念,但空是标识检查类别中的概念

db_column:字段名称,如果不指定则使用属性名称

db_index :如果值为 True,则会在表中为此字段创建索引

default:默认值

primary_key:如果为 True,该字段将成为模型的主键字段

unique:如果为 True,则该字段在表中必须具有唯一值

注意:如果生成迁移文件后更改的参数不影响表的结构,则无需再次生成迁移文件。 (默认为空,不影响表结构,无需再次生成迁移文件)

关系类型

类别:

ForeignKey:一对多,两端定义字段在

中(1)使用个访问多个:格式:object.model class lowercase _set

示例:grade.students_set

(2) 以一访问一:格式:object.model class 小写

示例:grade.studnets

(3) 访问 ID:格式:object.property_id

示例:btitle = models .CharField( max_length =20, db_column='标题', unique='true')

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门