在 Django 中,exact
是一种字段条件查询,它用于在查询中匹配字段的完全相等值。exact
的作用是过滤数据集,使其只包含与指定值完全匹配的记录。它适用于所有字段类型,包括字符型、数字型和日期型等。
语法
Model.objects.filter(field_name__exact=value)
其中:
Model
是你的 Django 模型类名。field_name
是你要查询的字段名。value
是要匹配的确切值。
使用方法和使用场景
- 精确匹配字符型字段: 如果你想根据模型的某个字符型字段进行精确匹配,可以使用
exact
条件查询。
# models.py
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
genre = models.CharField(max_length=50)
# views.py
from django.shortcuts import render
from .models import Book
def search_books(request):
query = request.GET.get('q')
if query:
books = Book.objects.filter(title__exact=query)
else:
books = Book.objects.all()
return render(request, 'search_results.html', {'books': books})
在上面的例子中,我们根据书籍的标题进行精确查询。用户可以在网页的搜索框中输入标题进行查询。
- 精确匹配数字型字段: 除了字符型字段,
exact
也适用于数字型字段。
# models.py
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=8, decimal_places=2)
quantity = models.PositiveIntegerField()
# views.py
from django.shortcuts import render
from .models import Product
def get_product_by_price(request):
target_price = 50.99
products = Product.objects.filter(price__exact=target_price)
return render(request, 'products.html', {'products': products})
上述例子中,我们根据产品的价格进行精确查询,找出所有价格为 50.99 的产品。
- 精确匹配日期型字段: 你也可以用
exact
来查询日期字段。
# models.py
from django.db import models
class Event(models.Model):
name = models.CharField(max_length=100)
date = models.DateField()
# views.py
from django.shortcuts import render
from .models import Event
def get_events_by_date(request):
target_date = "2023-07-29"
events = Event.objects.filter(date__exact=target_date)
return render(request, 'events.html', {'events': events})
在上述例子中,我们根据事件的日期字段进行精确查询,找出所有日期为 "2023-07-29" 的事件。
总结: exact
条件查询是 Django 中用于精确匹配字段值的一种查询方式,适用于字符型、数字型和日期型等字段。通过 filter()
方法,你可以根据模型的字段进行精确匹配,从而实现数据集的过滤和筛选。使用 exact
查询时,确保字段类型和查询值类型一致,否则可能导致不正确的结果。