F()函数的作用
F()函数在Django中是一个非常强大的工具,主要用于在查询表达式中引用模型的字段。它允许你在数据库层面执行各种操作,而无需将数据加载到Python内存中。这不仅提高了性能,还允许你利用数据库的优化功能。
字段引用
在查询表达式中引用模型的字段,例如
F('field_name')
算术运算
可以使用F()函数执行算术运算,如加、减、乘、除等,例如
F('price') + 10
或
F('quantity') * F('price')
条件表达式
Case
和
When
表达式,F()函数可以用于创建复杂的条件逻辑,例如
Case(When(F('age') > 18, then='adult'), default='minor')
更新字段值
在更新操作中,F()函数可以用于基于现有字段值的更新,例如
Model.objects.update(field=F('field') + 1)
数据库函数调用
F()函数可以与数据库特定的函数结合使用,例如
Length(F('name'))
或
Lower(F('name'))
字段间运算
F()函数可以用于字段间的运算,例如
Model.objects.annotate(total=F('field1') + F('field2'))
更新字段值示例
1,添加模型
Test/app11/models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
pub_date = models.DateTimeField('date published')
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
publication_date = models.DateField()
price = models.DecimalField(max_digits=5, decimal_places=2)
def __str__(self):
return self.title
2,视图函数
Test/app11/views.py
from django.shortcuts import render
from django.db.models import F
def book_list11(request):
# 对数据价格进行更新
books = Book.objects.update(price=F('price') -100)
# author_name = "小龙"
# # 查询指定作者的所有书籍,并增加价格
# books =Book.objects.filter(author=author_name).update(price=F('price') + 10)
return HttpResponse("数据已更新")
# return render(request, '11/book_list.html', {'books': books})
3,添加路由地址
Test/app11/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('book_list11/', views.book_list11, name='book_list11'),
]
4,访问页面
127.0.0.1:8000/app11/book_list11/