Skip to content

Commit e920e55

Browse files
fsbraunwiltso
andauthored
fix: File.objects.only("id") query when deleting a user (django-cms#1357)
* Fix: Failing js test * Fix Flie.objects.only("id") query refs django-cms#1290 * Add test for deleting users --------- Co-authored-by: William Lindholm <[email protected]>
1 parent 35d4b8e commit e920e55

File tree

3 files changed

+38
-2
lines changed

3 files changed

+38
-2
lines changed

CHANGELOG.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
CHANGELOG
33
=========
44

5+
unreleased
6+
==========
7+
8+
* Fix File.objects.only() query required for deleting user who own files.
9+
510
2.2.5 (2023-06-11)
611
==================
712

filer/models/filemodels.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from django.utils.translation import gettext_lazy as _
1414

1515
from polymorphic.managers import PolymorphicManager
16+
from polymorphic.query import PolymorphicQuerySet
1617
from polymorphic.models import PolymorphicModel
1718

1819
from .. import settings as filer_settings
@@ -21,7 +22,16 @@
2122
from .foldermodels import Folder
2223

2324

25+
class FileQuerySet(PolymorphicQuerySet):
26+
def only(self, *fields):
27+
fields = set(fields)
28+
fields.update(["_file_size", "sha1", "is_public"])
29+
return super().only(*fields)
30+
31+
2432
class FileManager(PolymorphicManager):
33+
queryset_class = FileQuerySet
34+
2535
def find_all_duplicates(self):
2636
r = {}
2737
for file_obj in self.all():

tests/test_models.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,11 @@ def tearDown(self):
3535
for f in File.objects.all():
3636
f.delete()
3737

38-
def create_filer_image(self):
38+
def create_filer_image(self, owner=None):
39+
if owner is None:
40+
owner = self.superuser
3941
file_obj = DjangoFile(open(self.filename, 'rb'), name=self.image_name)
40-
image = Image.objects.create(owner=self.superuser,
42+
image = Image.objects.create(owner=owner,
4143
original_filename=self.image_name,
4244
file=file_obj)
4345
return image
@@ -307,3 +309,22 @@ def test_canonical_url_settings(self):
307309
image.save()
308310
canonical = image.canonical_url
309311
self.assertTrue(canonical.startswith('/filer/test-path/'))
312+
313+
def test_delete_user_who_owns_file(self):
314+
"""Tests if deleting users who own files works"""
315+
from django.contrib.auth.models import User
316+
317+
user = User.objects.create(
318+
username="test",
319+
password="top-secret",
320+
321+
is_staff=True,
322+
)
323+
image = self.create_filer_image(user)
324+
325+
user.delete()
326+
327+
# User needs to be gone
328+
self.assertEqual(len(User.objects.filter(username="test")), 0)
329+
# Image remains w/o owner
330+
self.assertIsNone(File.objects.get(pk=image.pk).owner)

0 commit comments

Comments
 (0)