🌐 AI搜索 & 代理 主页
Skip to content
Prev Previous commit
Next Next commit
Introduce custom query set on generic assets to list all specific imp…
…lementations
  • Loading branch information
berinhard committed Feb 25, 2022
commit ec3e27536b3fd344db27f08e53650d3d5206d188
3 changes: 1 addition & 2 deletions sponsors/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -828,8 +828,7 @@ def get_child_models(self, *args, **kwargs):
return GenericAsset.all_asset_types()

def get_queryset(self, *args, **kwargs):
classes = self.get_child_models(*args, **kwargs)
return self.model.objects.select_related("content_type").instance_of(*classes)
return GenericAsset.objects.all_assets()

def get_actions(self, request):
actions = super().get_actions(request)
Expand Down
4 changes: 3 additions & 1 deletion sponsors/models/assets.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
from polymorphic.managers import PolymorphicManager
from polymorphic.models import PolymorphicModel

from sponsors.models.managers import GenericAssetQuerySet


def generic_asset_path(instance, filename):
"""
Expand All @@ -28,7 +30,7 @@ class GenericAsset(PolymorphicModel):
"""
Base class used to add required assets to Sponsor or Sponsorship objects
"""
objects = PolymorphicManager()
objects = GenericAssetQuerySet.as_manager()
non_polymorphic = models.Manager()

# UUID can't be the object ID because Polymorphic expects default django integer ID
Expand Down
8 changes: 8 additions & 0 deletions sponsors/models/managers.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,3 +118,11 @@ def provided_assets(self):
from sponsors.models.benefits import ProvidedAssetMixin
provided_assets_classes = ProvidedAssetMixin.__subclasses__()
return self.instance_of(*provided_assets_classes).select_related("sponsor_benefit__sponsorship")


class GenericAssetQuerySet(PolymorphicQuerySet):

def all_assets(self):
from sponsors.models import GenericAsset
classes = GenericAsset.all_asset_types()
return self.select_related("content_type").instance_of(*classes)