如何解决AttributeError:'str'对象在Django迁移迁移中没有属性'state_forwards'
我正在尝试将不同模型的postgres表的自动生成的ID设置为10000的起始值。我使用this article并执行以下操作:
python3 manage.py makemigrations core --empty
然后在迁移中添加:
operations = [
migrations.Runsql(
"ALTER SEQUENCE CORE_ORG_id_seq RESTART WITH 10000","ALTER SEQUENCE CORE_USER_id_seq RESTART WITH 10000","ALTER SEQUENCE CORE_PARTLISTING_id_seq RESTART WITH 1000","ALTER SEQUENCE CORE_BOMITEM_id_seq RESTART WITH 1000","ALTER SEQUENCE CORE_MANUFACTURER_id_seq RESTART WITH 1000;"
),migrations.Runsql(
"ALTER SEQUENCE CORE_BOM_id_seq RESTART WITH 1000","ALTER SEQUENCE CORE_SPECIFICPART_id_seq RESTART WITH 10000","ALTER SEQUENCE CORE_GENERICPART_id_seq RESTART WITH 10000;"
),]
我将它们放在两行中,因为我得到一个错误,__init.py__
只能接受6条命令。
在此上运行迁移时,我得到:
File "manage.py",line 21,in <module>
main()
File "manage.py",line 17,in main
execute_from_command_line(sys.argv)
File "/Users/myname/.local/share/virtualenvs/mobiusAPI-NVQT3lgx/lib/python3.8/site-packages/django/core/management/__init__.py",line 401,in execute_from_command_line
utility.execute()
File "/Users/myname/.local/share/virtualenvs/mobiusAPI-NVQT3lgx/lib/python3.8/site-packages/django/core/management/__init__.py",line 395,in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/myname/.local/share/virtualenvs/mobiusAPI-NVQT3lgx/lib/python3.8/site-packages/django/core/management/base.py",line 330,in run_from_argv
self.execute(*args,**cmd_options)
File "/Users/myname/.local/share/virtualenvs/mobiusAPI-NVQT3lgx/lib/python3.8/site-packages/django/core/management/base.py",line 371,in execute
output = self.handle(*args,**options)
File "/Users/myname/.local/share/virtualenvs/mobiusAPI-NVQT3lgx/lib/python3.8/site-packages/django/core/management/base.py",line 85,in wrapped
res = handle_func(*args,**kwargs)
File "/Users/myname/.local/share/virtualenvs/mobiusAPI-NVQT3lgx/lib/python3.8/site-packages/django/core/management/commands/migrate.py",line 243,in handle
post_migrate_state = executor.migrate(
File "/Users/myname/.local/share/virtualenvs/mobiusAPI-NVQT3lgx/lib/python3.8/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/myname/.local/share/virtualenvs/mobiusAPI-NVQT3lgx/lib/python3.8/site-packages/django/db/migrations/executor.py",line 147,in _migrate_all_forwards
state = self.apply_migration(state,migration,line 227,in apply_migration
state = migration.apply(state,schema_editor)
File "/Users/myname/.local/share/virtualenvs/mobiusAPI-NVQT3lgx/lib/python3.8/site-packages/django/db/migrations/migration.py",line 114,in apply
operation.state_forwards(self.app_label,project_state)
File "/Users/myname/.local/share/virtualenvs/mobiusAPI-NVQT3lgx/lib/python3.8/site-packages/django/db/migrations/operations/special.py",line 101,in state_forwards
state_operation.state_forwards(app_label,state)
AttributeError: 'str' object has no attribute 'state_forwards'
我也试图在我的psql shell中单独运行这些命令,它们可以正常工作,所以我认为这与模型或表无关。不过,我想将其放入迁移中,因此,如果其他人设置了本地数据库,请确保它会发生。什么是state_forwards,为什么会出现此错误?
感谢您的帮助!
解决方法
只有RunSql
个参数中的第一个是查询。
签名为:RunSQL(sql,reverse_sql=None,state_operations=None,hints=None,elidable=False)
因此您以state_operation
的形式传递了第三个查询,该查询需要一个操作列表。
每个查询需要有1个RunSql
,或者根据文档,传递一个sql查询数组:
operations = [
migrations.RunSQL([
"QUERY1","QUERY2",...
])
]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。