Является ли Django Multiple unique_together неправильно сопоставленным в PostgreSQL?

Когда я добавляю несколько кортежей unique_together в свою модель django, сопоставление базы данных PostgreSQL кажется неправильным (также согласно предыдущему ответу SO по этому вопросу). Далее следует пример.

Это моя миграция:

migrations.CreateModel(
    name='FinancialConcept',
    fields=[
        ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
        ('taxonomy', models.CharField(max_length=128)),
        ('name', models.CharField(max_length=256)),
        ('xbrl_element', models.CharField(max_length=256)),
        ('parent', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='analysis.FinancialConcept')),
    ],
),
migrations.AlterUniqueTogether(
    name='financialconcept',
    unique_together=set([('taxonomy', 'name'), ('taxonomy', 'xbrl_element'), ('parent', 'xbrl_element')]),
),
....

что, как я ожидал, создаст три UNIQUE индекса, по одному для каждой пары. Но вместо этого отображение БД выглядит следующим образом:

    Column    |          Type          |                               Modifiers                                
--------------+------------------------+------------------------------    ------------------------------------------
 id           | integer                | not null default nextval('analysis_financialconcept_id_seq'::regclass)
 taxonomy     | character varying(128) | not null
 name         | character varying(256) | not null
 xbrl_element | character varying(256) | not null
 parent_id    | integer                | 
Indexes:
    "analysis_financialconcept_pkey" PRIMARY KEY, btree (id)
    "analysis_financialconcept_taxonomy_xbrl_element_d8b45254_uniq" UNIQUE CONSTRAINT, btree (taxonomy, xbrl_element)
    "analysis_financialconcept_parent_id_51fc8021" btree (parent_id)

То есть один из индексов UNIQUE правильный, а два других отсутствуют.

Любая идея, что вызывает это?


person clapas    schedule 23.08.2017    source источник


Ответы (1)


Вы пробовали кортеж кортежей?

unique_together = (('taxonomy', 'name'), ('taxonomy', 'xbrl_element'), ('parent', 'xbrl_element'))
person Łukasz Kamiński    schedule 23.08.2017
comment
Только что попробовал, но это не имеет значения. Скобка (как и вся миграция) фактически создается командой makemigration django. - person clapas; 23.08.2017