Django model user create index for first_name, last_name
Я использую settings.AUTH_USER_MODEL
в качестве модели пользователя по умолчанию
И я хочу создать индекс на
public.auth_user.first_name
public.auth_user.last_name
Есть ли какой-нибудь элегантный способ создания этих индексов?
Вы можете сделать это, указав другую User
модель. Просто наследуя от AbstractUser
[Django-doc] и указывая индексы:
# app_name/models.py
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
first_name = models.CharField(_('first name'), max_length=150, db_index=True, blank=True)
last_name = models.CharField(_('last name'), max_length=150, db_index=True, blank=True)
class Meta(AbstractUser.Meta):
swappable = 'AUTH_USER_MODEL'
тогда вы можете указать модель пользователя для ссылки на модель User
в модуле app_name
:
# settings.py
# ⋮
AUTH_USER_MODEL = 'app_name.User'
# ⋮
Немного уродливый, но все же элегантный способ: Создайте необработанную SQL-миграцию, создав индекс.
Первый
pip3 install django-migrate-sql-deux
Тогда
import migrate_sql.operations
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('my_app', '0094_last_migration_name')
]
operations = [
migrate_sql.operations.CreateSQL(
name='auth_user_first_name_idx',
sql='create index auth_user_first_name_idx on auth_user (first_name)',
reverse_sql='drop index auth_user_first_name_idx',
),
migrate_sql.operations.CreateSQL(
name='auth_user_last_name_idx',
sql='create index auth_user_last_name_idx on auth_user (last_name)',
reverse_sql='drop index auth_user_last_name_idx',
),
]