Django模型、字段解析、属性解析

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 	设定对象的复数名称
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

像风一样的男人@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值