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

Luv*_*eet 1 python django django-models

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

pickup_station_id = models.IntegerField(null=True)
drop_station_id = models.IntegerField(null=True)
Run Code Online (Sandbox Code Playgroud)

我想要一个admin中的过滤器,它可以根据以下内容过滤查询集:

  • 拾取和下降ID是不同的
  • 拾取和下降ID是相同的

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

我的意思是,像这样的,

Mymodel.objects.filter(pickup_station_id==drop_station_id)

Mymodel.objects.filter(pickup_station_id!=drop_station_id)
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 6

你可以参考一个˚F ieldF-expression [Django的DOC] .所以我们可以这样写:

from django.db.models import F

Mymodel.objects.filter(pickup_station_id=F('drop_station_id'))
Run Code Online (Sandbox Code Playgroud)

我们可以否定一个q uery使用Q-object [Django的DOC] :

from django.db.models import F, Q

Mymodel.objects.filter(~Q(pickup_station_id=F('drop_station_id')))
Run Code Online (Sandbox Code Playgroud)

在这里,tilde(~)意味着我们否定Q对象所代表的条件.