Django-F表达式-直接在数据库中更新某字段的数据
基本的创建一个models.模型
# -*- coding: UTF-8 -*- from django.db import models class Author(models.Model): "作者模型" name = models.CharField(max_length=100) age = models.IntegerField() email = models.EmailField() class Meta: #该名称不能更改 db_table = 'author' #映射到数据库中为你自定义的名字,不设置这个默认为 包名_表名 映射到数据库 class Publisher(models.Model): "出版社模型" name = models.CharField(max_length=300) class Meta: db_table = 'publisher' class Book(models.Model): "book模型" name = models.CharField(max_length=300) pages = models.IntegerField() price = models.FloatField() rating = models.FloatField() author = models.ForeignKey(Author,on_delete = models.CASCADE) publisher = models.ForeignKey(Publisher,on_delete=models.CASCADE) class Meta: db_table = 'book' class BookOrder(models.Model): "图书订单模型" book = models.ForeignKey("Book",on_delete=models.CASCADE) price = models.FloatField() class Meta: db_table = 'book_order'
from .models import Book from django.db.models import F
from django.db import connection
Book.objects.update(price=F('price')+10) #直接在数据库上更新Book表下的price字段都在原来的基础上增加,F('price')会获到该该表下所有的price这个字段的值
print(connection.queries[-1])
#这样就可以了,直接在数据库上查看就看到改变了
额外 : 获取姓名和邮箱相同的数据
from .models import Book,Author #获取姓名和邮箱相同的数据 authors = Author.objects.filter(name=F('email')) #注意使用的是filter,也就是这个name是数据库的字段,并不是你自定义的, # F('email') 会将email的数据全部拿到,然后找到与name相同的数据,然后返回这些想等的数据 #输出的话根据上面的输出一样就行了

浙公网安备 33010602011771号