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相同的数据,然后返回这些想等的数据
    #输出的话根据上面的输出一样就行了

 

posted @ 2019-11-24 20:20  啃料丶  阅读(1559)  评论(0)    收藏  举报