base_adresse: ajouter des index sur unaccent_name et zipcode et tous les champs qui servent aux recherches (#66694) #147
|
@ -0,0 +1,63 @@
|
|||
# Generated by Django 3.2.18 on 2023-11-29 18:06
|
||||
|
||||
import django.contrib.postgres.indexes
|
||||
import django.db.models.functions.text
|
||||
from django.contrib.postgres import operations as postgresql_operations
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
('base_adresse', '0030_auto_20220627_1511'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
postgresql_operations.TrigramExtension(),
|
||||
migrations.AddIndex(
|
||||
model_name='citymodel',
|
||||
index=models.Index(fields=['code'], name='base_adress_code_e169d0_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='citymodel',
|
||||
index=models.Index(fields=['zipcode'], name='base_adress_zipcode_79aa6f_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='citymodel',
|
||||
index=models.Index(
|
||||
django.db.models.functions.text.Upper('unaccent_name'), name='base_adresse_city_name_idx'
|
||||
),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='departmentmodel',
|
||||
index=models.Index(
|
||||
django.db.models.functions.text.Upper('unaccent_name'), name='base_adresse_dept_name_idx'
|
||||
),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='regionmodel',
|
||||
index=models.Index(
|
||||
django.db.models.functions.text.Upper('unaccent_name'), name='base_adresse_region_name_idx'
|
||||
),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='streetmodel',
|
||||
index=models.Index(fields=['ban_id'], name='base_adress_ban_id_2c35ab_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='streetmodel',
|
||||
index=models.Index(fields=['zipcode'], name='base_adress_zipcode_bf7091_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='streetmodel',
|
||||
index=models.Index(fields=['citycode'], name='base_adress_citycod_428b79_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='streetmodel',
|
||||
index=django.contrib.postgres.indexes.GinIndex(
|
||||
django.contrib.postgres.indexes.OpClass(
|
||||
django.db.models.functions.text.Upper('unaccent_name'), 'gin_trgm_ops'
|
||||
),
|
||||
name='base_adresse_street_name_idx',
|
||||
),
|
||||
),
|
||||
]
|
|
@ -5,9 +5,11 @@ import json
|
|||
from io import StringIO
|
||||
from urllib import parse as urlparse
|
||||
|
||||
from django.contrib.postgres import indexes as postgresql_indexes
|
||||
from django.core.exceptions import FieldError
|
||||
from django.db import connection, models
|
||||
from django.db.models import JSONField, Q
|
||||
from django.db.models.functions import Upper
|
||||
from django.utils import timezone
|
||||
from django.utils.http import urlencode
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
@ -735,6 +737,15 @@ class StreetModel(UnaccentNameMixin, models.Model):
|
|||
|
||||
class Meta:
|
||||
ordering = ['unaccent_name', 'name']
|
||||
indexes = [
|
||||
models.Index(fields=['ban_id']),
|
||||
models.Index(fields=['zipcode']),
|
||||
models.Index(fields=['citycode']),
|
||||
nroche marked this conversation as resolved
Outdated
|
||||
postgresql_indexes.GinIndex(
|
||||
postgresql_indexes.OpClass(Upper('unaccent_name'), 'gin_trgm_ops'),
|
||||
name='%(app_label)s_street_name_idx',
|
||||
),
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
@ -759,6 +770,9 @@ class RegionModel(UnaccentNameMixin, models.Model):
|
|||
class Meta:
|
||||
ordering = ['code']
|
||||
unique_together = ('resource', 'code')
|
||||
indexes = [
|
||||
models.Index(Upper('unaccent_name'), name='%(app_label)s_region_name_idx'),
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
return '%s %s' % (self.code, self.name)
|
||||
|
@ -786,6 +800,9 @@ class DepartmentModel(UnaccentNameMixin, models.Model):
|
|||
class Meta:
|
||||
ordering = ['code']
|
||||
unique_together = ('resource', 'code')
|
||||
indexes = [
|
||||
models.Index(Upper('unaccent_name'), name='%(app_label)s_dept_name_idx'),
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
return '%s %s' % (self.code, self.name)
|
||||
|
@ -821,6 +838,11 @@ class CityModel(UnaccentNameMixin, models.Model):
|
|||
class Meta:
|
||||
ordering = ['-population', 'zipcode', 'unaccent_name', 'name']
|
||||
unique_together = ('resource', 'code', 'zipcode')
|
||||
indexes = [
|
||||
models.Index(fields=['code']),
|
||||
models.Index(fields=['zipcode']),
|
||||
models.Index(Upper('unaccent_name'), name='%(app_label)s_city_name_idx'),
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
return '%s %s' % (self.zipcode, self.name)
|
||||
|
|
Loading…
Reference in New Issue
Si on a 2 connecteurs BAN ?
(parce que, bien que je n'ai pas compris pourquoi, mais c'est le cas sur parsifal)
Je n'ai pas compris ce que tu insinues, peux-tu expliciter ?
Oui déso.
name='%(app_label)s_street_name_idx'
ici, j'ai l'impression qu'on va utiliser le même index pour 2 connecteurs instanciés sur un même tenant.
Je m'attendais à un truc comme : "%s%s" % (self.resource.slug, self.resource.get_connector_slug())
Et je réalise que ma remarque démontre mon manque de connaissance ici.
Le filtrage sur les objets connecteurs est déjà fait en amont sur le QuerySet, ex :
streets = self.streetmodel_set.all()
Il n'y a pas de distinction à faire sur les index pour isoler les instance des connecteurs.