Skip to main content
 首页 » 编程设计

python之django:当 2 个字段具有相同值时过滤查询集

2025年05月04日39shihaiming

我有一个模型,它有 2 个字段,例如,

pickup_station_id = models.IntegerField(null=True) 
drop_station_id = models.IntegerField(null=True) 

我想在管理员中使用一个过滤器,它可以根据以下条件过滤查询集

  • 上车和下车 ID 不同
  • 上车和下车 ID 相同

如何根据这些条件获取查询集?

我的意思是,像这样,

Mymodel.objects.filter(pickup_station_id==drop_station_id) 
 
Mymodel.objects.filter(pickup_station_id!=drop_station_id) 

请您参考如下方法:

您可以引用带有 F-expression [Django-doc] 的f字段 .所以我们可以这样写:

from django.db.models import <b>F</b> 
 
Mymodel.objects.filter(pickup_station_id=<b>F('drop_station_id')</b>)

我们可以使用 Q-object [Django-doc] 来否定一个q查询 :

from django.db.models import F, <b>Q</b> 
 
Mymodel.objects.filter(<b>~Q(</b>pickup_station_id=F('drop_station_id')<b>)</b>)

这里的波浪号 (~) 表示我们否定 Q 对象表示的条件。