index for jsonfield

This commit is contained in:
Sayyid Hamid Mahdavi 2025-11-15 14:50:18 +03:30
parent 1c42e3784a
commit 89768fa02e
2 changed files with 81 additions and 0 deletions

View file

@ -0,0 +1,37 @@
# Generated by Django 5.1.7 on 2025-11-15 11:19
import django.contrib.postgres.indexes
from django.conf import settings
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('promotions', '0005_alter_event_user'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
migrations.swappable_dependency(settings.OAUTH2_PROVIDER_APPLICATION_MODEL),
]
operations = [
migrations.AddIndex(
model_name='event',
index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='promotions_event_data_bc656abc'),
),
migrations.AddIndex(
model_name='plan',
index=django.contrib.postgres.indexes.GinIndex(fields=['event_list'], name='promotions_plan_event_783bb033'),
),
migrations.AddIndex(
model_name='plan',
index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='promotions_plan_data_b632bc41'),
),
migrations.AddIndex(
model_name='promotion',
index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='promotions_promotion_cb76da3e'),
),
migrations.AddIndex(
model_name='recipient',
index=django.contrib.postgres.indexes.GinIndex(fields=['data'], name='promotions_recipient_fba22446'),
),
]

View file

@ -1,6 +1,7 @@
import uuid import uuid
from django.conf import settings from django.conf import settings
from django.contrib.postgres.indexes import GinIndex
from django.db import models, transaction from django.db import models, transaction
from django.db.models import F from django.db.models import F
from django.utils import timezone from django.utils import timezone
@ -67,6 +68,15 @@ class Event(BaseModel):
objects = EventQuerySet.as_manager() objects = EventQuerySet.as_manager()
class Meta:
indexes = [
GinIndex(
fields=['data'],
# hashlib.md5("promotions_event_data_GinIndex".encode()).hexdigest()[:8] used for hash
name='promotions_event_data_bc656abc'
),
]
def __str__(self): def __str__(self):
return self.label return self.label
@ -101,6 +111,20 @@ class Plan(BaseModel):
objects = PlanQuerySet.as_manager() objects = PlanQuerySet.as_manager()
class Meta:
indexes = [
GinIndex(
fields=['event_list'],
# hashlib.md5("promotions_plan_event_list_GinIndex".encode()).hexdigest()[:8] used for hash
name='promotions_plan_event_783bb033'
),
GinIndex(
fields=['data'],
# hashlib.md5("promotions_plan_data_GinIndex".encode()).hexdigest()[:8] used for hash
name='promotions_plan_data_b632bc41'
),
]
def __str__(self): def __str__(self):
return self.title return self.title
@ -133,6 +157,16 @@ class Recipient(BaseModel):
data = models.JSONField(null=True, blank=True, default=dict) data = models.JSONField(null=True, blank=True, default=dict)
class Meta:
indexes = [
GinIndex(
fields=['data'],
# hashlib.md5("promotions_recipient_data_GinIndex".encode()).hexdigest()[:8] used for hash
name='promotions_recipient_fba22446'
),
]
def __str__(self): def __str__(self):
return f"{self.label} --> {self.plan}" return f"{self.label} --> {self.plan}"
@ -259,6 +293,16 @@ class Promotion(BaseModel):
objects = PromotionQuerySet.as_manager() objects = PromotionQuerySet.as_manager()
class Meta:
indexes = [
GinIndex(
fields=['data'],
# hashlib.md5("promotions_promotion_data_GinIndex".encode()).hexdigest()[:8] used for hash
name='promotions_promotion_cb76da3e'
),
]
def change_state(self, from_states: list | tuple, to_state, same_ok=True, raise_exception=False, def change_state(self, from_states: list | tuple, to_state, same_ok=True, raise_exception=False,
error_message=None, error_message=None,
data: None | dict = None): data: None | dict = None):