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

Django中读取数据的一些学习

作者:互联网

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