You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 00:21:41