- 今天学习的是在model中使用一些关于queryset的属性。
- 以一段代码为例:
class Person(models.Model):
p_name = models.CharField(max_length=18, unique=True)
p_age = models.IntegerField(default=18, db_column='age')
# False表示男,True表示女
p_sex = models.BooleanField(default=False, db_column='sex')
p_hobby = models.CharField(max_length=32, null=True, blank=True)
@classmethod
def create(cls, p_name, p_age=18, p_sex=False, p_hobby='Swimming'):
return cls(p_name=p_name, p_age=p_age, p_sex=p_sex, p_hobby=p_hobby)
class Meta:
db_table = 'Person'
- 以上代码中包含了这样一些知识点:
- 1.models中存在CharField、IntegerField、BooleanField、DateField这些基本的类别,分别对应了
数据库中的字符串、数据、布尔值等等基本的类型。 - 2.在之后的括号中,max_length表示的是字段最长长度,unique表示是否可重复,default表示默认值,
db_column表示该列的名字,null表示是否为空。 - 3.db_table则是规定了这一表的表名。
- 4.在代码中规定的create函数,可以认为是这个类的一个构造函数,可以自定义的构造不同的数据。
- 之后学习的是关于queryset中对于数据筛选的函数。主要在views.py中实现。
def query_persons(request):
persons = Person.objects.filter(p_age__gte=7)
context = {
"persons": persons
}
return render(request, 'db_list.html', context=context)
- filter和exclude均为常见的条件筛选器。可以不间断的链式调用。
filter返回的是符合条件的数据集,exclude返回的是不符合条件的数据集。 - 筛选的条件内容主要通过"属性名__操作=value"的形式进行。以下为常见的操作:
- __exact 精确等于 like ‘aaa’
- __iexact 精确等于 忽略大小写 ilike ‘aaa’
- __contains 包含 like ‘%aaa%’
- __icontains 包含 忽略大小写 ilike ‘%aaa%’,但是对于sqlite来说,contains的作用效果等同于icontains。
- __gt 大于
- __gte 大于等于
- __lt 小于
- __lte 小于等于
- __in 存在于一个list范围内
- __startswith 以…开头
- __istartswith 以…开头 忽略大小写
- __endswith 以…结尾
- __iendswith 以…结尾,忽略大小写
- __range 在…范围内
- __year 日期字段的年份
- __month 日期字段的月份
- __day 日期字段的日
- __isnull=True/False