Объединение двух таблиц связанных полей модели с помощью ORM Django
У меня есть следующие модели в моем приложении Django, где у меня есть общая информация о подписке пользователя как абстрактный класс, который содержит внешний ключ к моему пользователю, и мои другие бесплатные и платные модели подписки пользователя, которые наследуют абстрактный класс и реализуют желаемое поведение:
class CommonUserSubscriptionInfo(models.Model):
user = models.ForeignKey(User, on_delete=models.PROTECT,
related_name="%(class)s")
is_active = models.BooleanField(default=True, editable=False)
number_of_requests = models.IntegerField(default=0, editable=False)
hectares_consumed = models.FloatField(default=0, editable=False)
class Meta:
abstract = True
class FreeUserSubscription(CommonUserSubscriptionInfo):
max_free_hectares_allowed = models.FloatField(default=50)
max_number_of_requests_allowed = models.FloatField(default=50)
class PaidUserSubscription(CommonUserSubscriptionInfo):
plan = models.ForeignKey(PaidSubscriptionPackages, on_delete=models.PROTECT, related_name="users_subscriptions")
В моей модели пользователя, в случае, когда у пользователя нет активных подписок, как я могу объединить таблицы обоих связанных полей, чтобы запросить все неактивные бесплатные и платные подписки, упорядочить их по дате и вернуть самую новую неактивную подписку? что-то вроде:
class User(AbstractBaseUser, PermissionsMixin):
# code
def get_last_active_subscription(self):
return self.joined_subscriptions?.filter(is_active=False).order_by('-start_subscription_date')[0]
Я знаю, что могу использовать related_name для доступа к связанным строкам каждой таблицы, а затем я могу объединить оба набора запросов, как указано в этом вопросе , но мне интересно, есть ли лучший или, возможно, более эффективный способ достичь этого, используя ORM Django