Объединение двух таблиц связанных полей модели с помощью 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

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