Skip to content

Commit 5c3d061

Browse files
authored
Fix bug that prevents users from deleting sponsorship applications (#1978)
* Just remove delete from actions instead of disabling delete permission * Polymorphic models should use non polymorphic model to enable cascading deletion * Explicit is always better than implicit =)
1 parent 6f0c8c8 commit 5c3d061

File tree

3 files changed

+11
-2
lines changed

3 files changed

+11
-2
lines changed

sponsors/admin.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -831,8 +831,11 @@ def get_queryset(self, *args, **kwargs):
831831
classes = self.get_child_models(*args, **kwargs)
832832
return self.model.objects.select_related("content_type").instance_of(*classes)
833833

834-
def has_delete_permission(self, *args, **kwargs):
835-
return False
834+
def get_actions(self, request):
835+
actions = super().get_actions(request)
836+
if 'delete_selected' in actions:
837+
del actions['delete_selected']
838+
return actions
836839

837840
def has_add_permission(self, *args, **kwargs):
838841
return False

sponsors/models/assets.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from django.contrib.contenttypes.fields import GenericForeignKey
1111
from django.contrib.contenttypes.models import ContentType
1212
from django.db.models.fields.files import ImageFieldFile, FileField
13+
from polymorphic.managers import PolymorphicManager
1314
from polymorphic.models import PolymorphicModel
1415

1516

@@ -27,6 +28,8 @@ class GenericAsset(PolymorphicModel):
2728
"""
2829
Base class used to add required assets to Sponsor or Sponsorship objects
2930
"""
31+
objects = PolymorphicManager()
32+
non_polymorphic = models.Manager()
3033

3134
# UUID can't be the object ID because Polymorphic expects default django integer ID
3235
uuid = models.UUIDField(default=uuid.uuid4, editable=False)
@@ -47,6 +50,7 @@ class Meta:
4750
verbose_name = "Asset"
4851
verbose_name_plural = "Assets"
4952
unique_together = ["content_type", "object_id", "internal_name"]
53+
base_manager_name = 'non_polymorphic'
5054

5155
@property
5256
def value(self):

sponsors/models/benefits.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,12 +490,14 @@ class BenefitFeature(PolymorphicModel):
490490
Base class for sponsor benefits features.
491491
"""
492492
objects = BenefitFeatureQuerySet.as_manager()
493+
non_polymorphic = models.Manager()
493494

494495
sponsor_benefit = models.ForeignKey("sponsors.SponsorBenefit", on_delete=models.CASCADE)
495496

496497
class Meta:
497498
verbose_name = "Benefit Feature"
498499
verbose_name_plural = "Benefit Features"
500+
base_manager_name = 'non_polymorphic'
499501

500502
def display_modifier(self, name, **kwargs):
501503
return name

0 commit comments

Comments
 (0)