Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何修理我的Django“;ValueError:发现错误数量的约束“0”;迁移错误?_Django_Python 3.x_Migration_Unique Constraint - Fatal编程技术网

我如何修理我的Django“;ValueError:发现错误数量的约束“0”;迁移错误?

我如何修理我的Django“;ValueError:发现错误数量的约束“0”;迁移错误?,django,python-3.x,migration,unique-constraint,Django,Python 3.x,Migration,Unique Constraint,我正在使用Python3.7和Django。我尝试了这个解决方案,但仍然得到了同样的错误。我的一次迁移遇到了问题。我最近更新了我的模型的唯一约束 class ArticleSumStatByHour(models.Model): total_score = models.DecimalField(default=0, max_digits=12, decimal_places=2, null=False) total_seconds_to_reach_fp = models.De

我正在使用Python3.7和Django。我尝试了这个解决方案,但仍然得到了同样的错误。我的一次迁移遇到了问题。我最近更新了我的模型的唯一约束

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\u项目davea$python manage.py迁移articlesum
要执行的操作:
应用所有迁移:articlesum
运行迁移:
正在应用articlesum.0033_auto_20190830_1128…回溯(最近一次调用):
文件“manage.py”,第21行,在
从命令行(sys.argv)执行命令
文件“/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site packages/django/core/management/___init__.py”,第381行,从命令行执行
utility.execute()
文件“/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site packages/django/core/management/______.py”,执行中第375行
self.fetch_命令(子命令)。从_argv(self.argv)运行_
文件“/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site packages/django/core/management/base.py”,第316行,从_argv运行
self.execute(*args,**cmd_选项)
文件“/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site packages/django/core/management/base.py”,第353行,在execute中
输出=self.handle(*args,**选项)
文件“/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site packages/django/core/management/base.py”,第83行,包装
res=句柄函数(*args,**kwargs)
文件“/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site packages/django/core/management/commands/migrate.py”,第203行,在handle中
假首字母=假首字母,
文件“/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site packages/django/db/migrations/executor.py”,第117行,在migrate中
状态=self.\u迁移\u所有\u转发(状态,计划,完整计划,假=假,假首字母=假首字母)
文件“/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site packages/django/db/migrations/executor.py”,第147行,全部向前迁移
state=self.apply\u迁移(state,migration,false=false,false\u initial=false\u initial)
文件“/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site packages/django/db/migrations/executor.py”,第244行,在apply_migration中
state=migration.apply(状态,模式编辑器)
文件“/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site packages/django/db/migrations/migration.py”,第124行,在apply中
操作。数据库转发(self.app\u标签、模式编辑器、旧状态、项目状态)
数据库中的文件“/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site packages/django/db/migrations/operations/models.py”,第514行
getattr(新的\模型。\元,self.option \名称,set()),
文件“/Users/davea/Documents/workspace/articlesum_project/venv/lib/python3.7/site packages/django/db/backends/base/schema.py”,第356行,在alter_unique_中
self.\u delete\u组合索引(模型,字段,{'unique':True},self.sql\u delete\u unique)
文件“/Users/davea/Documents/workspace/articlesum\u project/venv/lib/python3.7/site packages/django/db/backends/base/schema.py”,第385行,在删除索引中
“,”。连接(列),
ValueError:为articlesum\u articlesumstatbyhour(网站id、已用时间(以秒为单位)、小时(以天为单位)找到了错误数量(0)的约束

为什么迁移无法创建我的唯一约束?

当前迁移似乎正在查找数据库当前没有的上一个索引。因此,您需要在db表上设置最后一个唯一索引

每次更改表上的索引时,它都会检查其以前的索引并删除它。在您的情况下,它无法获取上一个索引


解决方案-1.您可以手动生成它2.或者还原到使用以前索引的代码并进行迁移。然后最后在代码中更改为新索引并运行迁移。(需要处理django_迁移文件)

迁移中缺少一组括号,可能是因为您使用的是元组。请尝试
unique\u-together=[[“一天中的一小时”,“网站”]
unique\u-together=[“一天中的一小时”,“网站”]
感谢您的建议,但遗憾的是,这两种方法都不起作用(都产生了相同的错误)在添加此约束之前,您有其他约束吗?不确定--我从离开项目的其他人那里继承了此代码库。有没有办法检查这类事情?是的,翻阅以前的迁移文件。我认为有一个悬而未决的问题,Django没有正确地删除约束。因此,您可能应该自己创建一个迁移文件,在该文件添加新约束之前删除先前的约束。
(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)