如何在filters.FilterSet中通过关联模型日期字段过滤Produto?
通过关联模型字段过滤Produto模型的实现方法
你当前的写法已经是正确的实现方式,Django Filter支持使用**双下划线__**跨关联模型访问字段,结合Estoque模型中定义的related_name='estoque',可以直接通过关联字段过滤Produto实例。
1. views.py 中的过滤类实现
class ProdutoFilter(filters.FilterSet): class Meta: model = Produto fields = { 'codigo_de_barras': ['contains'], 'nome': ['contains'], 'estoque__ultima_entrada': ['exact'], # estoque为关联模型的反向关联名,ultima_entrada是关联模型字段 'estoque__ultima_saida': ['exact'] # estoque为关联模型的反向关联名,ultima_saida是关联模型字段 }
2. models.py 中的 Estoque 模型定义
class Estoque(models.Model): produto = models.OneToOneField( Produto, on_delete=models.CASCADE, related_name='estoque') quantidade = models.PositiveIntegerField( default=0, validators=[MinValueValidator(0)], error_messages={'Erro':'数量必须为正数'}) ultima_entrada = models.DateTimeField(default=None, null=True, blank=True) ultima_saida = models.DateTimeField(default=None, null=True, blank=True)
补充说明:
- 这里的
estoque__ultima_entrada对应Estoque模型的ultima_entrada字段,因为Produto与Estoque是一对一关联,且Estoque设置了related_name='estoque',所以可以通过这个反向关联直接访问关联模型的字段。 - 如果你需要更灵活的日期过滤,比如范围查询,可以将
exact替换为gte(大于等于)、lte(小于等于)等Django支持的查找类型。
内容的提问来源于stack exchange,提问作者Anastácio Gomes
相关产品推荐
相关产品推荐

