Django(part28)--F对象

学习笔记,仅供参考


F对象


在Django中F是指一个类,我们可以通过这个类创建一个对象。

一个F对象代表数据库中某个字段(列)的信息,F对象通常是对数据库中的字段值在不加载到内存中的情况下直接在数据库服务器端进行操作。F对象在数据包 django.db.models 中,当我们使用时,需要通过如下语句进行加载:

from django.db.models import F

  • 作用

在执行过程中获取某列的值,并对其直接进行操作;

在同时比较数据库中两个字段的值时,也可以使用F对象。


  • 语法
from django.db.models import F
F('列名')

  • 举个例子1

现在,我们要将所有作者的年龄加1.

在Django shell中输入如下命令:

In [30]: models.Author.objects.all().update(age=F('age')+1)
Out[30]: 5

我们再看看数据表

mysql> select * from bookstore_author;
+----+--------+-----+----------------------+
| id | name   | age | email                |
+----+--------+-----+----------------------+
|  1 | 山羊   |  20 | [email protected] |
|  2 | 小黄   |  11 | [email protected]    |
|  5 | 小黑   |  13 | [email protected]    |
|  6 | 小白   |  19 | [email protected]    |
|  7 | 山羊哥 |  28 | [email protected]    |
+----+--------+-----+----------------------+
5 rows in set (0.00 sec)

很好,年龄都加1了。


  • 举个例子2

现在,我筛选出出厂价exfacPrice小于零售价price的记录。

我们先看一下bookstore_book数据表:

mysql> select * from bookstore_book;
+----+-------------------+----------------+------------+-------+
| id | title             | pub            | exfacPrice | price |
+----+-------------------+----------------+------------+-------+
|  1 | Djangoweb开发实战 | 清华大学出版社 |      35.00 | 40.00 |
|  2 | python            | 机械工业出版社 |      35.00 | 40.00 |
|  3 | R                 | 人民邮电出版社 |      35.00 | 40.00 |
|  4 | 数据处理          | 清华大学出版社 |      45.00 | 40.00 |
|  5 | 算法              | 人民邮电出版社 |      45.00 | 30.00 |
|  6 | 小黄              | 黑山羊出版社   |      45.00 | 30.00 |
+----+-------------------+----------------+------------+-------+
6 rows in set (0.00 sec)

在Django shell中输入如下命令:

books = models.Book.objects.filter(price__gt=F('exfacPrice'))
for book in books:
    print(book.title, '出厂价:', book.exfacPrice, '零售价:', book.price)

输出:

Djangoweb开发实战 出厂价: 35.00 零售价: 40.00
python 出厂价: 35.00 零售价: 40.00
R 出厂价: 35.00 零售价: 40.00

猜你喜欢

转载自blog.csdn.net/m0_37422217/article/details/106884775