Django过滤器外键相关模型过滤
我最近一直在努力使用dajngo过滤器。我有两个模型:书和作者Django过滤器外键相关模型过滤,django,search,filter,model,django-filter,Django,Search,Filter,Model,Django Filter,我最近一直在努力使用dajngo过滤器。我有两个模型:书和作者 class Book(models.Model): title = models.CharField(max_length=150) author = models.ForeignKey(Author, on_delete=model.CASCADE) length = models.PositiveIntegerField() class Author(models.Model): first_name
class Book(models.Model):
title = models.CharField(max_length=150)
author = models.ForeignKey(Author, on_delete=model.CASCADE)
length = models.PositiveIntegerField()
class Author(models.Model):
first_name = models.CharField(max_length=150)
last_name = models.CharField(max_length=150)
year_of_birth = models.DateFiled()
所以,我想做一个过滤页面,在那个里你们可以通过它的属性(标题,作者等)和关于作者的信息找到这本书。例如,这本书短于300页,作者年龄在20-25岁之间
在filters.py中,我有:
import django_filters
from .models import Book, Author
class BookFilter(django_filters.FilterSet):
class Meta():
model = Book
fields = ['title', 'author']
而且实际上也不知道如何通过不同的模型进行过滤,这与外键到书本模型有关
我对Dajngo几乎没有经验,我想知道这是否是一个非常复杂的问题
谢谢 每个过滤器基本上有两个重要参数:
field\u name
:要筛选的模型字段的名称。您可以使用Django的\uu
语法遍历“关系路径”,以过滤相关模型上的字段。例如,作者姓
lookup_expr:筛选时要使用的字段查找。Django的\uu
语法可以再次用于支持查找转换。例如,年份
。有关可使用的字段查找的完整列表,请参见此处:
字段field\u name
和lookup\u expr
一起表示一个完整的Django查找表达式。Django的查找参考中提供了查找表达式的详细说明:
考虑到这一点,以下是答案:
import django_filters
from .models import Book, Author
class BookFilter(django_filters.FilterSet):
title = django_filters.CharFilter(field_name='title', lookup_expr='iexact')
author = django_filters.CharFilter(field_name='author__last_name', lookup_expr='iexact')
class Meta():
model = Book
如果要按确切日期筛选,只需将以下内容添加到BookFilter
类中:
date_of_birth = django_filters.DateFilter(field_name='author__date_of_birth', lookup_expr='exact')
birth_year__gt = django_filters.NumberFilter(field_name='author__date_of_birth', lookup_expr='year__gt')
birth_year__lt = django_filters.NumberFilter(field_name='author__date_of_birth', lookup_expr='year__lt')
不过,按出生年份筛选更有意义(例如,从1980年至1990年出生的作者那里获取所有书籍)。要做到这一点,您需要向BookFilter
类添加以下内容:
date_of_birth = django_filters.DateFilter(field_name='author__date_of_birth', lookup_expr='exact')
birth_year__gt = django_filters.NumberFilter(field_name='author__date_of_birth', lookup_expr='year__gt')
birth_year__lt = django_filters.NumberFilter(field_name='author__date_of_birth', lookup_expr='year__lt')
您可以查看django过滤器
软件包
Meta类中字段序列中的项可能包括“关系路径”,使用Django的_uu语法过滤相关模型上的字段
像这样:
import django_filters
from .models import Book, Author
class BookFilter(django_filters.FilterSet):
class Meta():
model = Book
fields = ['title', 'author__first_name', 'author__last_name']
好吧,但除了作者的出生日期,我该如何过滤书籍呢?如何将出生日期添加到BookFilter Meta classEdit中的筛选字段,并输入答案。谢谢!这帮了大忙!这和数字而不是年份是相似的吗?例如lookup_expr='number_ugt'?哦,它只是'gt':)这里有什么帮助吗?