代码之家  ›  专栏  ›  技术社区  ›  Luv33preet

django:当两个字段具有相同值时筛选查询集

  •  1
  • Luv33preet  · 技术社区  · 7 年前

    我有一个模型有两个字段,比如,

    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)
    
    1 回复  |  直到 7 年前
        1
  •  6
  •   willeM_ Van Onsem    7 年前

    您可以参考 f 带有 F -expression [Django-doc] . 所以我们可以这样写:

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

    我们可以 否定 Q 通过使用 Q -object [Django-doc] :

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

    这是瓷砖( ~ 意思是我们 否定 条件是 Q 对象表示。

    推荐文章