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()
关于外键的读取
比如我们的数据库里的两个表是这样的,当你得到第二个表的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