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参数]

django ORM 一对多, 多对多 查询 以及 结合Tamplate

Django聚合查询 orm字段及属性

Django--ORM 多表查询

Django模型层—ORM

Django-ORM-多表操作