我使用的是Python 3.7和Django。我尝试了这个解决方案-- Received "ValueError: Found wrong number (0) of constraints for ..." during Django migration,但仍然得到相同的错误。我的一次迁移遇到了麻烦。我最近更新了我的模型的唯一约束...
class ArticleSumStatByHour(models.Model):
total_score = models.DecimalField(default=0, max_digits=12, decimal_places=2, null=False)
total_seconds_to_reach_fp = models.DecimalField(default=0, max_digits=12, decimal_places=2, null=False)
num_articles = models.IntegerField(default=0, null=False)
hour_of_day = IntegerField(
null=False,
validators=[
MaxValueValidator(23),
MinValueValidator(0)
]
)
index = models.FloatField(default=0)
website = models.ForeignKey(website, on_delete=models.CASCADE, related_name='articlesumstatbyhoursub')
class Meta:
unique_together = ("hour_of_day","website")
这是我的迁移,
...
class Migration(migrations.Migration):
dependencies = [
('articlesum', '0032_auto_20190808_1452'),
]
operations = [
migrations.AlterField(
model_name='articlesumstatbyhour',
name='website',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='articlesumstatbyhoursub', to='articlesum.website'),
),
migrations.AlterUniqueTogether(
name='articlesumstatbyhour',
unique_together={('hour_of_day','website')},
),
]
但是当我运行迁移时,我收到这个令人费解的错误,抱怨"ValueError:找到错误数量(0)的约束“……
(venv) localhost:articlesum_project davea$ python manage.py migrate articlesum
Operations to perform:
Apply all migrations: articlesum
Running migrations:
Applying articlesum.0033_auto_20190830_1128...Traceback (most recent call last):
File "manage.py", line 21, in <module>
execute_from_command_line(sys.argv)
File "/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
File "/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site-packages/django/core/management/base.py", line 316, in run_from_argv
self.execute(*args, **cmd_options)
File "/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site-packages/django/core/management/base.py", line 353, in execute
output = self.handle(*args, **options)
File "/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site-packages/django/core/management/base.py", line 83, in wrapped
res = handle_func(*args, **kwargs)
File "/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site-packages/django/core/management/commands/migrate.py", line 203, in handle
fake_initial=fake_initial,
File "/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site-packages/django/db/migrations/executor.py", line 117, in migrate
state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
File "/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site-packages/django/db/migrations/executor.py", line 147, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
File "/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site-packages/django/db/migrations/executor.py", line 244, in apply_migration
state = migration.apply(state, schema_editor)
File "/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site-packages/django/db/migrations/migration.py", line 124, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
File "/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site-packages/django/db/migrations/operations/models.py", line 514, in database_forwards
getattr(new_model._meta, self.option_name, set()),
File "/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site-packages/django/db/backends/base/schema.py", line 356, in alter_unique_together
self._delete_composed_index(model, fields, {'unique': True}, self.sql_delete_unique)
File "/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site-packages/django/db/backends/base/schema.py", line 385, in _delete_composed_index
", ".join(columns),
ValueError: Found wrong number (0) of constraints for articlesum_articlesumstatbyhour(website_id, elapsed_time_in_seconds, hour_of_day)
为什么迁移无法创建我的唯一约束?
发布于 2020-08-14 17:05:05
似乎当前的迁移正在寻找您的数据库当前没有的前一个索引。因此,您需要在db表上设置最后一个唯一索引。
每次更改表上的索引时,它都会检查其先前的索引并将其删除。在您的情况下,它不能获取前一个索引。
解决方案-1.可以手动生成它。2.或者恢复到使用以前索引的代码,最后在代码中将migrate.Then更改为新索引并运行迁移。(需要注意的django_migration文件)
https://stackoverflow.com/questions/57730809
复制相似问题