Как установить условие "наоборот" для моделей django

Я использую Django3 и model

Я хочу получить данные Distance из одного города в другой город.

Но в базе данных хранится только расстояние от A до B (потому что расстояние от B до C одинаковое)

Итак, я хочу получить правильный ряд, независимо от порядка городов.

Я могу сделать это с помощью этих двух предложений и проверить каждое на ошибки.

Distance.objects.get(key_first=firstcity, key_second=secondcity)

Distance.objects.get(key_second=secondcity, key_second=firstcity)

Однако это выглядит немного неудобно и требует двухкратной выборки БД, есть ли более умный способ, как этот ниже?

Distance.objects.get((key_first=firstcity, key_second=secondcity) | (key_second=secondcity, key_second=firstcity))

Вы почти угадали со вторым примером:

from django.db.models import Q

Distance.objects.filter(Q(key_first=firstcity, key_second=secondcity) | Q(key_second=secondcity, key_second=firstcity)).first()

Документы по объектам Q

Вернуться на верх