Django.db.utils.ProgrammingError: нет уникального ограничения, соответствующего заданным ключам для ссылаемой таблицы

У меня проблема с Django 2.2.7 и postgresql 12 при использовании команды "python manage.py migrate".

Когда я выполняю его, процесс завершается со следующей ошибкой: django.db.utils.ProgrammingError: there is no unique constraint matching given keys for referenced table "clients_clients"

Я понимаю, что эта ошибка указывает на то, что когда поле используется в качестве правящего ключа в другой таблице, это поле должно быть уникальным.

Моими клиентами модели в Django являются:

class Clients(models.Model):
    name = models.CharField(max_length=60, unique=True)
    document_num = models.CharField(max_length=15)
    phone = models.CharField(max_length=15, blank=True)
    email = models.EmailField(max_length=30, blank=True)
    instagram = models.CharField(max_length=30, blank=True)
    address = models.TextField(max_length=100, blank=True)

Модель с правящим ключом к полю "имя" clients_clients является:

class Budgets(models.Model):
    date = models.DateField(error_messages={'null': "You must set a date"})
    title = models.CharField(max_length=50, unique=True)
    client = models.ForeignKey(Clients, null=True, on_delete=models.SET_NULL, to_field='name')
    price = models.DecimalField(default=0, decimal_places=2, max_digits=10)
    observations = models.TextField(max_length=200, blank=True)

Как показано выше, поле "name" в модели "Clients" установлено как unique=True. Но, несмотря на это, возникает упомянутая ошибка.

Кто-нибудь может помочь мне понять почему?

Я могу решить эту проблему.

Проблема в том, что поскольку я скопировал свое приложение Django из существующей установки в новую, в папках app существует множество файлов миграции.

Сначала мне пришлось удалить все файлы внутри папок "migrations" в любом приложении моего проекта Django (следя за тем, чтобы не удалить файл init.py).

Затем я снова выполнил команды: python manage.py makemigrations

и

python manage.py migrate

Теперь все работает нормально.

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