Ошибка при создании таблицы закрытия в Django: объект 'ForeignKey' не имеет атрибута 'column'

У меня есть модель Jobs и мне нужна таблица закрытия job_hierarchies схема выглядит следующим образом

Table job_hierarchies {
  account_id int [not null]
  ancestor int [not null, ref: > jobs.id]
  descendant int [not null, ref: > jobs.id]
  level int [not null]
}

Я попробовал создать модель и миграцию для JobHierarchy следующим образом

Модель

# api/models/job_hierarchy.py
from django.db import models
from .base import BaseModel
from api.models import Job

class JobHierarchy(BaseModel):
    account_id = models.IntegerField(null=False)
    ancestor = models.ForeignKey(Job, on_delete=models.CASCADE, related_name='ancestor_jobs', db_column='ancestor_id')
    descendant = models.ForeignKey(Job, on_delete=models.CASCADE, related_name='descendant_jobs', db_column='descendant_id')
    level = models.IntegerField(null=False)


    class Meta:
        db_table = 'job_hierarchies'

Миграция выглядит следующим образом

# Generated by Django 5.0.2 on 2024-03-08 04:28

from django.db import migrations, models

def add_foreign_keys(apps, schema_editor):
    JobHierarchy = apps.get_model('api', 'JobHierarchy')
    Job = apps.get_model('api', 'Job')
    schema_editor.add_field(
        JobHierarchy,
        models.ForeignKey(Job, on_delete=models.CASCADE, related_name='ancestor_jobs', db_column='ancestor_id'),
    )
    schema_editor.add_field(
        JobHierarchy,
        models.ForeignKey(Job, on_delete=models.CASCADE, related_name='descendant_jobs', db_column='descendant_id'),
    )


class Migration(migrations.Migration):

    dependencies = [
        ('api', '0002_create_jobs'),
    ]

    operations = [
        migrations.CreateModel(
            name='JobHierarchy',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('account_id', models.IntegerField()),
                ('level', models.IntegerField()),
            ],
            options={
                'db_table': 'job_hierarchies',
            },
        ),
        migrations.RunPython(add_foreign_keys),
    ]

Когда я запускаю make migrations, я получаю следующую ошибку

 File "/app/api/migrations/0009_create_job_hierarchies.py", line 8, in add_foreign_keys
    schema_editor.add_field(
  File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/schema.py", line 730, in add_field
    "name": self._fk_constraint_name(model, field, constraint_suffix),
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/schema.py", line 1708, in _fk_constraint_name
    [field.column],
     ^^^^^^^^^^^^
AttributeError: 'ForeignKey' object has no attribute 'column'. Did you mean: 'db_column'?

Я новичок в Python + django, поэтому любая помощь будет оценена по достоинству.

Обновления

Ранее у меня была миграция, как показано ниже, которая не вызывала проблем с миграцией, но вызывала проблемы, когда я пытался вставить объект Job


class Migration(migrations.Migration):

    dependencies = [
        ('api', '0009_create_job_hierarchies'),
    ]

    operations = [
        migrations.CreateModel(
            name='Tenure',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('employee', models.ForeignKey(on_delete=models.deletion.CASCADE, to='api.Employee')),
                ('job', models.ForeignKey(on_delete=models.deletion.CASCADE, to='api.Job')),
                ('date_of_joining', models.DateField()),
                ('date_of_exit', models.DateField()),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
            ],
            options={
                'db_table': 'tenures',
            }
        ),
    ]

т.е. ошибка была связана только с колонкой-предком

Вернуться на верх