Django模型、字段解析、属性解析
2020-07-24 21:13
260 查看
Django模型最佳实践
1. 正确的为模型和关系字段命名。 2. 设置适当的 related_name 属性。 3. 用 OneToOneField 代替 ForeignKeyField(unique=True) 。 4. 通过“迁移操作”(migrate)来添加模型。 5. 用NoSQL来应对需要降低范式级别的场景。 6. 如果布尔类型可以为空要使用 NullBooleanField 7. 在模型中放置业务逻辑。 8. 用 <ModelName>.DoesNotExists 取代 ObjectDoesNotExists 。 9. 在数据库中不要出现有效数据。 10. 不要对 QuerySet 调用 len() 函数。 11. 将 QuerySet 的 exists() 方法的返回值用于 if 条件。 12. 用 DecimalField 来存储货币相关数据而不是 FloatField 。 13. 定义 __str__ 方法。 14. 不要将数据文件放在同一个目录中。
模型定义参考
对字段名称的限制 字段名不能是Python的保留字,否则会导致语法错误 字段名不能有多个连续下划线,否则影响ORM查询操作 Django模型字段类 字段类 说明 AutoField 自增ID字段 BigIntegerField 64位有符号整数 BinaryField 存储二进制数据的字段,对应Python的 bytes 类型 BooleanField 存储 True 或 False CharField 长度较小的字符串 DateField 存储日期,有 auto_now 和 auto_now_add 属性 DateTimeField 存储日期和时间,两个附加属性同上 DecimalField 存储固定精度小数,有 max_digits (有效位数)和decimal_places (小数点后面)两个必要的参数 DurationField 存储时间跨度 EmailField 与 CharField 相同,可以用 EmailValidator 验证 FileField 文件上传字段 FloatField 存储浮点数 ImageField 其他同 FileFiled ,要验证上传的是不是有效图像 IntegerField 存储32位有符号整数。 GenericIPAddressField 存储IPv4或IPv6地址 NullBooleanField 存储 True 、 False 或 null 值 PositiveIntegerField 存储无符号整数(只能存储正数) SlugField 存储slug(简短标注) SmallIntegerField 存储16位有符号整数 TextField 存储数据量较大的文本 TimeField 存储时间 URLField 存储URL的 CharField UUIDField 存储全局唯一标识符
字段属性
通用字段属性 null 数据库中对应的字段是否允许为 NULL ,默认为 False blank 后台模型管理验证数据时,是否允许为 NULL ,默认为 False choices 设定字段的选项,各元组中的第一个值是设置在模型上的值,第二值是人类可读的值 db_column 字段对应到数据库表中的列名,未指定时直接使用字段的名称 db_index 设置为 True 时将在该字段创建索引 db_tablespace 为有索引的字段设置使用的表空间,默认为 DEFAULT_INDEX_TABLESPACE default 字段的默认值 editable 字段在后台模型管理或 ModelForm 中是否显示,默认为 True help_text 表单小组件旁边显示的额外的帮助文本。 primary_key 将字段指定为模型的主键,未指定时会自动添加 AutoField 用于主键,只读。 unique 设置为 True 时,表中字段的值必须是唯一的 verbose_name 字段在后台模型管理显示的名称,未指定时使用字段的名称 ForeignKey 属性 1. limit_choices_to :值是一个Q对象或返回一个Q对象,用于限制后台显示哪些对象。 2. related_name :用于获取关联对象的关联管理器对象(反向查询),如果不允许反向,该属性应 该被设置为 '+' ,或者以 '+' 结尾。 3. to_field :指定关联的字段,默认关联对象的主键字段。 4. db_constraint :是否为外键创建约束,默认值为 True 。 5. on_delete :外键关联的对象被删除时对应的动作,可取的值包括 django.db.models 中定义的: CASCADE :级联删除。 PROTECT :抛出 ProtectedError 异常,阻止删除引用的对象。 SET_NULL :把外键设置为 null ,当 null 属性被设置为 True 时才能这么做。 SET_DEFAULT :把外键设置为默认值,提供了默认值才能这么做。 ManyToManyField 属性 1. symmetrical :是否建立对称的多对多关系。 2. through :指定维持多对多关系的中间表的Django模型。 3. throughfields :定义了中间模型时可以指定建立多对多关系的字段。 4. db_table :指定维持多对多关系的中间表的表名。
模型元数据选项
选项 说明 abstract 设置为True时模型是抽象父类 app_label 如果定义模型的应⽤不在INSTALLED_APPS中可以用该属性指定 db_table 模型使用的数据表名称 db_tablespace 模型使用的数据表空间 default_related_name 关联对象回指这个模型时默认使用的名称,默认为<model_name>_set get_latest_by 模型中可排序字段的名称。 managed 设置为True时,Django在迁移中创建数据表并在执行flush管理命令时把表移除 order_with_respect_to 标记对象为可排序的 ordering 对象的默认排序 permissions 创建对象时写入权限表的额外权限 default_permissions 默认为 ('add', 'change', 'delete') unique_together 设定组合在一起时必须独一无二的字段名 index_together 设定一起建立索引的多个字段名 verbose_name 为对象设定人类可读的名称 verbose_name_plural 设定对象的复数名称
相关文章推荐
- Django 模型类中属性字段的限制
- Django模型层字段类型、字段属性,对数据库表进行增、删、改、查操作方法(models)
- Django中ORM模型总结(二)[模型类的对应关系,模型类的属性,字段类型]
- Django 数据模型字段及属性
- django数据模型(Model)的字段类型解析
- 咸鱼笔记—Django模型(字段属性)
- Django模型中字段属性choice使用说明
- Django的模型类中的auto_now和auto_now_add属性的作用和区别
- Django模型字段类型详解
- django,模型文件新增中文字段说明报错问题
- django 模型model与数据库3——高级操作(外联,多对多,修改字段)
- django的Model 模型中常用的字段类型
- 通过数据库向Django模型添加字段的示例
- django模型中的字段和model名显示为中文小技巧分享
- django模型的字段类型和关系
- Django模型中字段类型与字段参数
- django模型字段
- HTML5基础加强css样式篇(css属性:怪异盒模型解析)(四十六)
- Django model 字段类型及选项解析
- Django模型的属性(Meta)