Как обрабатывать отношения "многие-ко-многим" в Django без промежуточной таблицы?
Я унаследовал странную структуру таблицы:
class Customer(models.Model):
account_number = models.CharField()
class Subscription(models.Model):
account_number = models.CharField()
Итак, модели Customer и Subscription связаны между собой номерами счетов. Каждый клиент может иметь несколько подписок, а каждая подписка может иметь несколько клиентов, но нет промежуточной таблицы; нет таблицы "Account". Как мне поступить в такой ситуации? Если у меня есть набор запросов Subscription, как мне получить соответствующий набор запросов Customer без выполнения ужасно длинного запроса типа
customers = Customer.objects.filter(account_number__in=list(subscriptions.values_list('account_number', flat=True)))
Я пытаюсь избежать этого, потому что это создаст массивный запрос, выполнение которого займет очень много времени.
Поскольку у него нет таблицы m2m, это, вероятно, лучший способ сделать это. Однако вы можете немного оптимизировать запрос, чтобы использовать Django для использования подзапроса вместо списка номеров счетов в операторе where.
subs = subscriptions.only('account_number').all()
customers = Customer.objects.filter(account_number__in=subs)
# if you print out the query you should see a subquery in the query where statement
print(customers.query)