首页 > 其他分享 >Django中读取数据的一些学习

Django中读取数据的一些学习

时间:2022-08-14 16:59:54浏览次数:64  
标签:depart 读取数据 models gender Django 学习 obj id name

Django中读取数据的一些学习

关于元组的读取

​ 当我们在写数据库架构时,我们需要考虑数据库内存,而经常的操作是,比如对于gender,固定值一般为男、女,但是一直写男女中文字符过于占内存在utf-8中,于是我们经常采用元组来存储男女

如下:

class UserInfo(models.Model):
    """ 员工表 """
    name = models.CharField(verbose_name="姓名", max_length=16)
    password = models.CharField(verbose_name="密码", max_length=64)
    age = models.IntegerField(verbose_name="年龄")
    account = models.DecimalField(verbose_name="账户余额", max_digits=10, decimal_places=2, default=0)
    create_time = models.DateTimeField(verbose_name="入职时间")

    # 无约束
    # depart_id = models.BigIntegerField(verbose_name="部门ID")
    # 1.有约束
    #   - to,与那张表关联
    #   - to_field,表中的那一列关联
    # 2.django自动
    #   - 写的depart
    #   - 生成数据列 depart_id
    # 3.部门表被删除
    # ### 3.1 级联删除
    depart = models.ForeignKey(verbose_name="部门", to="Department", to_field="id", on_delete=models.CASCADE)
    # ### 3.2 置空
    # depart = models.ForeignKey(to="Department", to_field="id", null=True, blank=True, on_delete=models.SET_NULL)

    # 在django中做的约束
    gender_choices = (
        (1, "男"),
        (2, "女"),
    )
    gender = models.SmallIntegerField(verbose_name="性别", choices=gender_choices)

在最后的约束中用元组来做一个存储

而当我们要读取gender数据时,我们如果用obj.gender 取到的必然是1或者2,即你在数据库中存储什么就取到什么,后续你还要写一个简单的转换,但Django考虑到了这一点,当你使用obj.get_gender_display时,可以直接取到对应的汉字,算是一个方便我们使用的小技巧。

get_字段名称_display()

关于外键的读取

image-20220814162320552

比如我们的数据库里的两个表是这样的,当你得到第二个表的id,然后去查到其对应的depart_id然后你还要读第一个表,通过id查询到title

而depart_id则是第一个表的外键,于是Django为我们提供了一种比较方便的方式,还得我们之前明明是depart时foreignkey但生成的字段却是depart_id,那么depart有啥用呢,其实对于这种我们只要depart.title,它会自动帮我们读取depart_id对应过去的id然后去找到title。

# 用Python的语法获取数据
for obj in queryset:
    print(obj.id, obj.name, obj.account, obj.create_time.strftime("%Y-%m-%d"), obj.gender, obj.get_gender_display(), obj.depart_id, obj.depart.title)
    # print(obj.name, obj.depart_id)
    # obj.depart_id  # 获取数据库中存储的那个字段值
    # obj.depart.title  # 根据id自动去关联的表中获取哪一行数据depart对象。

上面是我们直接在python那里把数据处理出来了然后可以传到前端

也可以通过前端模板语法,我们直接把queryset传过去通过前端模板语法来处理。

模板语法:

{% for obj in queryset %}
    <tr>
        <th>{{ obj.id }}</th>
        <td>{{ obj.name }}</td>
        <td>{{ obj.password }}</td>
        <td>{{ obj.age }}</td>
        <td>{{ obj.account }}</td>
        <td>{{ obj.create_time|date:"Y-m-d" }}</td>
        <td>{{ obj.get_gender_display }}</td>
        <td>{{ obj.depart.title }}</td>
        <td>
            <a class="btn btn-primary btn-xs" href="#">编辑</a>
            <a class="btn btn-danger btn-xs" href="#">删除</a>
        </td>
    </tr>
{% endfor %}

标签:depart,读取数据,models,gender,Django,学习,obj,id,name
From: https://www.cnblogs.com/dhuAtree/p/16585733.html

相关文章

  • docker swarm容器编排学习笔记
    1、介绍DockerSwarm 和DockerCompose一样,都是Docker官方容器编排项目不同点:DockerCompose是一个在单个服务器或主机上创建多个容器的工具,DockerSwarm则可以......
  • 学习python-周总结08
    周总结一、操作系统的发展史三大核心硬件CPU:计算机中真正干活的人内存:给CPU准备需要运行的代码硬盘:永远存储将来可能要被运行的代码注意:CPU是整个计算机执行效率......
  • Java学习 (20) Java数组篇(04)Arrays类&冒泡排序&稀疏数组
    目录Arrays类语法实例冒泡排序语法实例具体讲解视频(狂神说Java)稀疏数组语法实例具体讲解视频(狂神说Java)Arrays类教组的工具类java.util.Arrays由于数组对象本身并没有......
  • HCIA学习笔记十五:VLAN虚拟局域网
    一、VLAN的产生原因• 缺少转发控制手段的以太网1)交换机是可以分割冲突的,它的一个端口是一个冲突域,但是所有端口是在一个广播域里面。所以当前这个环境里面,它就是一个......
  • 机器学习(李宏毅)——终身学习笔记
    LifeLongLearning问题背景Lifelonglearning通常写为LLL,别名:ContinuousLearning、NeverEndigLearning以及Incremental(递增的、渐进的)Learning。难点:本来学完tas......
  • Java学习笔记之—java内存结构
    java内存结构之前一直是在学习c++,所以对c++的内存结构比较了解。但是目前由于工作需要从事Java开发,而自己对这方面的知识比较欠缺,所以从网络上阅读查看别人的学习总结,希望......
  • day01 Markdown学习
    Markdown学习二级标题三级标题字体Hello,World!加粗左右各两个**Hello,World!斜体左右各一个*Hello,World!斜体加粗左右各三个***Hello,World!......
  • [学习笔记]BSGS
    $\operatorname{BSGS}$,也即$Baby\;step\;Giant\;step$大步小步算法,可以在$\Theta(\sqrt{p})$的时间内求解$$a^x\equivb\pmod{p}$$的问题,其中$a,p$互质(也即$a......
  • java第七周学习情况
    这个星期主要是在搞学校在暑期安排的实验报告b怎么说来着才知道这个消息几天 这是对学习不上心的体现啊题目也有点多慢慢做呗而Java这边还是看些相关知识呗说实话......
  • 研发工程师L1Python学习
    汉诺塔Description有三个立柱A、B、C。A柱上穿有大小不等的圆盘N个,较大的圆盘在下,较小的圆盘在上。要求把A柱上的圆盘全部移到C柱上,保持大盘在下、小盘在上的规律(可借助B......