Хорошо, а пока я нашел несколько хитрый способ обойти мою проблему. Это работает, но немного некрасиво.
Поэтому я не мог найти способ, не создавая взаимосвязи между двумя моделями, чтобы проверить наличие действительного поиска по заголовку из уведомления.
в качестве работы я запросил все поиски заголовков, срок действия которых не истек, и преобразовал их в список номеров участков (ключ, который я использую для поиска по таблицам)
# Get list of Title Search for jank in query
active_title_searches = TitleSearch.objects.filter(expiration_date__gte=timezone.now())
active_title_searches = active_title_searches.values_list("parcel_number", flat=True)
Затем я добавил к фильтру __in search, чтобы проверить, находится ли номер участка из родительской таблицы в списке номеров участков активного поиска по заголовкам, который мы создали ранее.
# grab only notices that have title searches
ts_junk_notice = Notice.objects.filter(status="SendNotice", violation_fk__parcel_number__in=active_title_searches)
и, похоже, это помогает. это похоже на подзапрос, чтобы проверить, есть ли активный поиск по заголовку, но я где-то читал django документы, и он сказал, что некоторым базам данных было трудно выполнять вложенные запросы, и вместо этого вы должны выполнить 2 простых запроса. Поэтому создайте список и проверьте его.
Я не уверен, поможет ли это кому-нибудь, но надеюсь, что да.
ps Я также нашел этот пакет от кого-то другого, описывающего аналогичную проблему, которая может также помочь вам. https://www.reddit.com/r/django/comments/7fvlf7/join_two_models_without_a_foreign_key/
https://github.com/martsberger/django-joinfield