Skip to content

Commit 3565e88

Browse files
authored
Merge pull request django-guardian#896 from Natgho/adding-group-and-user-indexes
Improve default indexing, add index comparison tests and fix test timezones
2 parents 6cb9529 + c021558 commit 3565e88

File tree

11 files changed

+728
-16
lines changed

11 files changed

+728
-16
lines changed

example_project/settings.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ def abspath(*args):
6060

6161
USE_I18N = True
6262
USE_L10N = True
63+
USE_TZ = True
64+
TIME_ZONE = "UTC"
6365

6466
LOGIN_REDIRECT_URL = "/"
6567

example_project_custom_group/settings.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ def abspath(*args):
6060

6161
USE_I18N = True
6262
USE_L10N = True
63+
USE_TZ = True
64+
TIME_ZONE = "UTC"
6365

6466
LOGIN_REDIRECT_URL = "/"
6567

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Generated by Django 5.2.5 on 2025-08-28 23:02
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('auth', '0012_alter_user_first_name_max_length'),
11+
('contenttypes', '0002_remove_content_type_name'),
12+
('guardian', '0002_generic_permissions_index'),
13+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14+
]
15+
16+
operations = [
17+
migrations.RemoveIndex(
18+
model_name='groupobjectpermission',
19+
name='guardian_gr_content_ae6aec_idx',
20+
),
21+
migrations.RemoveIndex(
22+
model_name='userobjectpermission',
23+
name='guardian_us_content_179ed2_idx',
24+
),
25+
migrations.AddIndex(
26+
model_name='groupobjectpermission',
27+
index=models.Index(fields=['permission', 'group', 'content_type', 'object_pk'], name='guardian_gr_permiss_83545c_idx'),
28+
),
29+
migrations.AddIndex(
30+
model_name='groupobjectpermission',
31+
index=models.Index(fields=['group', 'content_type', 'object_pk'], name='guardian_gr_group_i_9e7d12_idx'),
32+
),
33+
migrations.AddIndex(
34+
model_name='userobjectpermission',
35+
index=models.Index(fields=['permission', 'user', 'content_type', 'object_pk'], name='guardian_us_permiss_e5749c_idx'),
36+
),
37+
migrations.AddIndex(
38+
model_name='userobjectpermission',
39+
index=models.Index(fields=['user', 'content_type', 'object_pk'], name='guardian_us_user_id_8eae14_idx'),
40+
),
41+
]

guardian/models/models.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@ class UserObjectPermission(UserObjectPermissionAbstract):
125125

126126
class Meta(UserObjectPermissionAbstract.Meta):
127127
abstract = False
128+
indexes = [
129+
models.Index(fields=["permission", "user", "content_type", "object_pk"]),
130+
models.Index(fields=["user", "content_type", "object_pk"]),
131+
]
128132

129133

130134
class GroupObjectPermissionBase(BaseObjectPermission):
@@ -186,3 +190,7 @@ class GroupObjectPermission(GroupObjectPermissionAbstract):
186190

187191
class Meta(GroupObjectPermissionAbstract.Meta):
188192
abstract = False
193+
indexes = [
194+
models.Index(fields=["permission", "group", "content_type", "object_pk"]),
195+
models.Index(fields=["group", "content_type", "object_pk"]),
196+
]
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 5.2.5 on 2025-08-28 23:39
2+
3+
import django.utils.timezone
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('testapp', '0007_genericgroupobjectpermission'),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name='project',
16+
name='created_at',
17+
field=models.DateTimeField(default=django.utils.timezone.now),
18+
),
19+
]

guardian/testapp/models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from django.contrib.admin.models import LogEntry
55
from django.contrib.auth.models import AbstractBaseUser, AbstractUser
66
from django.db import models
7+
from django.utils import timezone
78

89
from guardian.mixins import GuardianUserMixin
910
from guardian.models import GroupObjectPermissionAbstract, GroupObjectPermissionBase, UserObjectPermissionBase
@@ -39,7 +40,7 @@ class Meta(GroupObjectPermissionAbstract.Meta):
3940

4041
class Project(models.Model):
4142
name = models.CharField(max_length=128, unique=True)
42-
created_at = models.DateTimeField(default=datetime.now)
43+
created_at = models.DateTimeField(default=timezone.now)
4344

4445
class Meta:
4546
get_latest_by = "created_at"

0 commit comments

Comments
 (0)