Django F函数

时间:2024-07-17 06:57:54

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/