Похоже, что ваши проблемы были вызваны вами, добавив unique_together
, который включает в себя поле, которое может иметь значения NULL
.
price = models.DecimalField(max_digits=10, decimal_places=4, null=True)
Поле price
может иметь NULL
значения в вашей базе данных, как вы определили null=True
.
Ваш unique_together
содержит это обнуляемое поле, однако:
unique_together = (('published', 'city', 'price'),)
Скорее всего, вы создали несколько test
объектов в вашей базе данных без указания цены. Затем вы создали ограничение unique_together
, которое нарушается, поскольку в столбце price
несколько записей имеют значение NULL
.
Самый простой вариант исправить это, вероятно, это:
- удалите все свои записи с помощью
test.objects.all().delete()
- запустите миграции (
python manage.py migrate
), которые теперь будут возможны, поскольку ваше ограничение больше не нарушено - , затем создайте записи снова
Вы получите ValidationError
при их создании, поскольку ваше ограничение будет снова нарушено. Вам необходимо выяснить, как обрабатывать конфликтующие записи, например, путем изменения одного из значений (published
, city
или price
) или просто не хранить записи, которые вызывают ошибку.
Другой опция заключается в обновлении ваших записей вручную, чтобы удалить любые конфликты. Скорее всего, достаточно добавить цену к каждой записи, чтобы исправить это.
Вы также можете очистить таблицу test
до SQL. В этом случае вам также нужно избавиться от записей в таблице django_migrations
в вашей базе данных, удалить миграции и снова запустить makemigrations
и migrate
.
Вы сможете исправить свои проблемы удалив test
объекты, запустив migrate
и затем создав их снова.