Django: применить фильтр к полю связанной модели, которое находится в другой базе данных - PullRequest
1 голос
/ 13 февраля 2020

У меня две таблицы в двух базах данных, скажем Policy в DB_A и Quote в DB_B.

Policy имеет поле result_reference, которое является идентификатором таблицы Quote в DB_B

политика в DB_A

class Policy(models.Model):
    result_reference = models.IntegerField()
    policy_date = models.DateTimeField()

Цитата в DB_B

class Quote(models.Model):
    quote_type = models.IntegerField()
    policy_type = models.CharField(max_length = 100)
    policy_premium = models.IntegerField()

Тип политики может быть S для Single и M для Multiple. Я хочу получить политики с датой политики через 30 дней вместе с policy_type=M

Что я пробовал

import datetime
start_date = datetime.datetime.now() + datetime.timedelta(30)
p = Policy.objects.using(default_database).filter(policy_date__gte=start_date)

Но это возвращает политики которые имеют policy_type S и M. Как я могу отфильтровать его по типу политики M?

1 Ответ

1 голос
/ 13 февраля 2020

Если я вас хорошо понимаю, вы можете попробовать: возьмите список quotes с типом M и отфильтруйте Policy по этому списку, используя in, и по этой причине вы должны применить действительный using за каждый запрос.

m_quotes = Quote.objects.filter(policy_type='M').values_list('pk', flat=True)
m_quotes = list(m_quotes)
p = Policy.objects.using(default_database).filter(result_reference__in=m_quotes)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...