Django学习路18_F对象和Q对象
2023-09-11 14:21:27 时间
F 对象:
可以使用模型的 A 属性和 B 属性进行比较
写法:
需要的数据对象 = 数据表(类名).objects.filter(列名__条件=F('列名2'))
需求: 查看男生数量比女生少 的公司名称
companies = Company.objects.filter(c_boy_num__lt=F('c_girl_num'))
F 对象支持算术运算
需求: 查看男生数量比女生少 15个的公司名称
companies = Company.objects.filter(c_boy_num__lt=F('c_girl_num')-15)
在 models.py 中创建数据表 Company
class Company(models.Model):
c_name = models.CharField(max_length=16)
# 公司名字
c_girl_num = models.IntegerField(max_length=16)
# 女生人数
c_boy_num = models.IntegerField(max_length=16)
# 男生人数
产生迁移文件
python manage.py makemigrations
进行迁移
python manage.py migrate
添加数据
在 urls.py 中进行注册
需求:
查看 女生多于男生的公司名称
url(r'getgirlgtboy',views.getgirlgtboy)
views.py 中创建 getgirlgtboy 函数
def getgirlgtboy(request):
companies = Company.objects.filter(c_girl_num__gt=F('c_boy_num'))
for company in companies:
# 进行遍历后查看公司名
print(company.c_name)
return HttpResponse("获取成功")
注:
F 导包 导入的是
from django.db.models import F
F 对象使用 算数表达式
def getgirlgtboy(request):
companies = Company.objects.filter(c_girl_num__lt=F('c_boy_num')-30)
# 查看男生比女生多于 30 的
for company in companies:
# 进行遍历后查看公司名
print(company.c_name)
return HttpResponse("获取成功")
Q 对象 过滤器的方法中的参数 常用于 组合条件 表名(models中创建的类) .objects.filter(Q(表中列名__条件=值)) 示例: Student.objects.filter(Q(sage_lt=25)) Q对象支持 | & ~ 年龄大于等于 25 的 分析: 不小于 25
示例: Student.objects.filter(~Q(sage_lt=25))
Q 对象可以对条件进行封装
封装后支持逻辑运算
与 &
或 |
非 ~
在 urls.py 中进行注册
url(r'getgirlandboy',views.getgirlandboy)
在 models.py 中添加 对应的函数 getgirlandboy
def getgirlandboy(request):
companies = Company.objects.filter(Q(c_boy_num__gt=90) & Q(c_girl_num__gt=80))
# 男生大于 90 且 女生大于 80 的公司名称
for company in companies:
# 进行遍历后查看公司名
print(company.c_name)
return HttpResponse("获取成功")
注:
且 : Q(条件) & Q(条件)
取反 : ~Q 表示取反
或 : Q(条件) | Q(条件)
运行结果
2020-05-11
相关文章
- django视图层
- 【Python/前端】Django创建ws/websocket接口 并供前端(vue)消费
- C#/Sqlite-SQLite PetaPoco django 打造桌面程序
- 「基于Python技术的智慧中医商业项目」Django后端主页应用设计
- Centos7.x解决Django使用sqlite3出现的问题
- 如何使用 Django 创建翻译应用程序
- Django+Bootstrap+Mysql 搭建个人博客(三)
- Django路由系统---django重点之url命名分组
- Python django写视图函数request的方法和属性没有自动补全代码提示(包括写其他代码的时候函数参数的变量没有代码提示)
- Django:django后台传递数据到js中
- Django:查询后,分页功能为全部对象分页,丢失查询查询参数
- 【django学习】——Django介绍和实战(开发简易版博客网页)
- [Django] query = query.decode(errors=‘replace‘) AttributeError: ‘str‘ object has no attribute ‘de