DJango一对一查询,ORM 列类型及列参数
Posted jixu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DJango一对一查询,ORM 列类型及列参数相关的知识,希望对你有一定的参考价值。
一对一查询
表的创建
# 通过 OneToOneField 创建一对一的关系 from django.db import models # Create your models here. class StaffInfo(models.Model): name = models.CharField(max_length=32, null=True) age = models.CharField(max_length=32, null=True) class Salary(models.Model): money = models.CharField(max_length=32, null=True) staff = models.OneToOneField("StaffInfo")
增删改查
# 增 和普通一样 models.StaffInfo.objects.create(name="xxx", age=12) models.Salary.objects.create(money=3000, staff_id=2) # 一对一关联的外键如果添加重复会报错,也就是说django已经帮我们做好了唯一索引 # 删 和普通的也是一样的 models.Salary.objects.filter(staff_id=2).delete() # 也有级联删除的问题, 可以通过on_delete 修改值取消级联删除 # 改 和普通也一样 models.Salary.objects.filter(staff_id=2).update(money=2000) # 查 分为正查和反差两种 # 正查 通过点表中外键名跨表查询 row.staff.name res = models.Salary.objects.all() for row in res: print(row.money, row.staff.name) # 反差 点关联表的表明小写进行跨表查询 row.salary.money res = models.StaffInfo.objects.all() for row in res: print(row.name, row.salary.money)
列类型
django中的列类型我们主要通过和mysql中列类型对比来看
""" MySQL列类型 Django列类型 tinyint 无 smallint (unsigned) SmallIntegerField (PositiveSmallIntegerField) 数字类型 int (unsigned) IntegerField (PositiveSmallIntegerField) mediumint 无 bigint (unsigned) BigIntegerField (PositiveBigIntegerField) float FloatField decimal(5,2)表示小数2位,最大长度5位 DecimalField char 无 字符串类型 varchar VarCharField text TextField 时间类型 datetime(2019-7-1 1:1:1) DateTimeField date (2019-7-1) DateField """
参数
""" max_length 最大长度 null 是否为空 default 默认值 do_index 添加普通索引 unique 添加唯一索引 unique_together 联合唯一索引 index_together 唯一索引 这两个联合索引需要放在 类Meta中 class Meta: unique_together = ( ("字段1", "字段2"), ...... ) index_together = ( ("字段1", "字段2"), ...... ) """
django-admin
django-admin主要是django给我们提供的后台管理系统,我们可以在里面对数据进行增删改查
1、django-admin如何打开
urlpatterns = [ url(r‘^admin/‘, admin.site.urls), ]
我们创建项目时会自动生成如下rui 在浏览器输入对应的url即可进入django-admin
2、创建用户
""" 终端输入: python manage.py createsuperuser 输入用户名 邮箱(可不写) 密码 """
3、想要管理自己生成的表
需要在自己对应app的admin.py文件中注册一下
from app02 import models admin.site.register(models.Student) admin.site.register(models.Teacher)
4、django-admin中的列类型与参数
以下的类型只有在django-admin的管理后台中起作用
""" 前面为列类型, 括号中是我们从数据库中看到的类型 EmailField(CharField) 字符串类型,admin以及modelform用来输入验证是不是合法的邮箱字符串 IPAddressField(Field) 字符串类型 admin以及modelform用来输入IPV4 验证 GenericIpAddressField(Field) 字符串类型 用来输入 IPV4 以及 IPV6 验证 参数: protocol 用于指定IPV4或IPV6 "both" "ipv4" "ipv6" unpack_ipv4 如果指定为True 则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启此功能,需要protocol="both" URLField(CharField) 字符串类型 用来输入url 验证 SlugField(CharField) 字符串 用来输入 数字 字母 下划线 连接符(减号) 验证 CommaSeparatedIntegerField(CharField) 字符串 验证 形式必须为 逗号分隔的数字 UUIDField(Field) 字符串 提供对uuid格式的验证 FieldField(Field) 可以选择文件 在数据库中看还是字符串类型 django-admin中列的参数 verbose_name Admin中显示的字段名称(相当于给列名改个名字) blank Admin中是否允许用户输入为空 editable Admin中是否可以编辑(设为False直接隐藏) help_text Admin中该字段的提示信息 choices Admin中显示选择框的内容 choice = ( (1,"男"), (2,"女"), ) 如果你选择男,会把 1 存进数据库中 因为性别是永远不会变动的,所以用不变动的数据存在内存避免跨表操作 gender = IntegerField(choices=choices) """
以上是关于DJango一对一查询,ORM 列类型及列参数的主要内容,如果未能解决你的问题,请参考以下文章
[Django框架之ORM操作:多表查询,聚合查询分组查询F查询Q查询choices参数]