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

如何为Django模型设置双向匹配条件 不分顺序查询城市距离数据

你想要的写法思路是正确的,只需要配合Django的Q对象实现逻辑或查询即可,同时你给出的示例查询条件里存在笔误,第二个条件的第一个筛选字段应为key_first。

具体实现步骤

  1. 先导入Q对象
from django.db.models import Q
  1. 单次查询即可得到结果:
distance = Distance.objects.get(
    Q(key_first=firstcity, key_second=secondcity) | 
    Q(key_first=secondcity, key_second=firstcity)
)

进阶优化

如果需要频繁使用该查询逻辑,可以封装到模型自定义管理器中,复用性更高:

from django.db import models
from django.db.models import Q

class DistanceManager(models.Manager):
    def get_between_cities(self, city_a, city_b):
        return self.get(
            Q(key_first=city_a, key_second=city_b) | 
            Q(key_first=city_b, key_second=city_a)
        )

class Distance(models.Model):
    # 原有字段定义
    key_first = models.CharField(max_length=64)
    key_second = models.CharField(max_length=64)
    distance_value = models.FloatField()
    
    objects = DistanceManager()

封装后调用方式更简洁:

distance = Distance.objects.get_between_cities(firstcity, secondcity)

注意事项

  • 需要保证数据库中不会同时存在(A,B)和(B,A)两条重复的距离数据,否则调用get()会抛出MultipleObjectsReturned异常
  • 如果不存在对应城市的距离数据,会抛出DoesNotExist异常,可根据业务需求自行捕获处理

内容的提问来源于stack exchange,提问作者whitebear

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:24:03