ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Django中读取数据的一些学习

2022-08-14 17:05:20  阅读:171  来源: 互联网

标签: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
来源: https://www.cnblogs.com/dhuAtree/p/16585733.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有