Django-ORM模型层语法(十一)多表查询之F查询

F查询

生成多表的准备工作已经在博客[Django-ORM模型层语法(四)之多表操作准备工作]中写了,各位可以点击下方的链接,跟着操作:

多表操作的准备工作(非常重要!一定要看喔!)

app01_book表 :

idtitlepricepublish_datepublishs_id
1红楼梦662020-02-022
2聊斋1002020-02-021
3论语2002020-02-022
4三国演义3002020-02-021
5老子4002020-02-022
在Book表中添加新的字段:reserve,sales

models.py

from django.db import models


class Book(models.Model):
	title = models.CharField(max_length=32)
	price = models.DecimalField(max_digits=8, decimal_places=2)
	publish_date = models.DateField(auto_now_add=True)

	# 库存
	reserve = models.IntegerField(default=1000)
	# 卖出
	sales = models.IntegerField(default=1000)

	# 一对多
	publishs = models.ForeignKey(to='Pulish')
	# 多对多
	authors = models.ManyToManyField(to='Author')

	def __str__(self):
		return self.title

Terminal

python manege.py makegirations
python manage.py migrate

app01_book表 :

idtitlepricepublish_datepublishs_idreservesales
1红楼梦662020-02-0228001000
2聊斋1002020-02-0212001000
3论语2002020-02-0221000500
4三国演义3002020-02-0211000800
5老子4002020-02-0221200400

app01/tests.py

"""
当你只是想测试django中的某一个py文件内容 那么你可以不用书写前后端交互的形式
而是直接写一个测试脚本即可
脚本代码无论是写在应用下的tests.py还是自己单独开设py文件都可以
"""
# 测试环境的准备 去manage.py中拷贝前四行代码 然后自己写两行
import os

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "orm1.settings")
    import django
    django.setup()
    # 在这个代码块的下面就可以测试django里面的单个py文件了
    # 所有的代码都必须等待环境准备完毕之后书写
    from app01 import models

	# F查询
    '''
    能够帮助你直接获取到表中某个字段对应的数据
    '''
    from django.db.models import F
    # 1.查询卖出数大于库存数的书籍
    res = models.Book.objects.filter(sales__gt=F('reserve'))
    print(res)

    # 2.将所有书籍的价格提升500元
    models.Book.objects.update(price=F('price')+500)

    # 3.将所有书的名称后面加上'爆款'两个字
    '''
    在操作字符类型的数据时,F不能直接做到字符串的拼接
    '''
    from django.db.models.functions import Concat
    from django.db.models import Value
    models.Book.objects.update(title=Concat(F('title'),Value('爆款')))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值