Py学习  »  Django

如何删除django模型中的字段-回答问题的变体

Phlip • 4 年前 • 163 次点击  

尽管有几个类似的问题被发布,但这些问题都与我的案例不一样。

我有一个像这样的模型:

class Person(models.Model):
"""Definition of persons that will fulfill a role in a committee
or will be in a way associated with a committee as an administrator
"""
ClientId = models.ForeignKey('clients.Client', on_delete=models.CASCADE,
                             to_field='id')
PersNumber = models.PositiveIntegerField(null=False)
PersSurName = models.CharField(max_length=40, null=False)
PersNames = models.CharField(max_length=40, null=False)

我在clientid和persnumber上设置了记录的唯一性。

我在数据库中创建了3条记录。 一路上,我开始相信,我可以使用记录的自动生成ID作为个人编号(我正在学习Django)。

我从我的模型中删除了persnumber并进行了makemigrations。

在我开始迁移之前一切都很好…

我得到以下错误:

django.core.exceptions.FieldDoesNotExist: Person has no field named 'PersNumber'

关于如何克服这个错误的任何想法

完整跟踪如下:

Operations to perform:

应用所有迁移:admin、auth、clients、contenttypes、komadm_conf、sessions 正在运行迁移: 应用komadm_conf.0017_auto_20180830_1806…回溯(最近一次呼叫最后一次): 文件“c:\applicationdef\za\co\drie_p\komadm in.db\komadmin\komadmtest\komadm_app\komadm_env\lib\site packages\django\db\models\options.py”,第564行,在get_字段中 返回self.fields_map[字段名称] keyError:'个人号码'

在处理上述异常期间,发生了另一个异常:

回溯(最近一次呼叫的最后一次): 文件“manage.py”,第15行,in 从命令行(sys.argv)执行 文件“c:\applicationdef\za\co\drie_p\komadm in.db\komadm\komadmtest\komadm_app\komadm_env\lib\site packages\django\core\management_uuu init_uuuu.py”,第381行,从命令行执行 实用程序.execute() 文件“C:\applicationdef\za\co\drie_p\komadm in.db\komadmin\komadmtest\komadm_app\komadm_env\lib\site packages\django\core\management_uuuu init_uuuy”,第375行,在执行中 self.fetch_命令(子命令)。从_argv(self.argv)运行_ 文件“c:\applicationdef\za\co\drie_p\komadm in.db\komadm\komadmtest\komadm_app\komadm_env\lib\site packages\django\core\management\base.py”,第316行,从\argv运行 self.execute(*参数,**命令选项) 文件“c:\applicationdef\za\co\drie_p\komadm in.db\komadmin\komadmtest\komadm_app\komadm_env\lib\site packages\django\core\management\base.py”,第353行,在执行中 输出=self.handle(*参数,**选项) 文件“C:\applicationdef\za\co\drie_p\komadm in.db\komadmin\komadmtest\komadm_app\komadm_env\lib\site packages\django\core\management\base.py”,第83行,包装 res=手柄功能(*args,**kwargs) 文件“c:\applicationdef\za\co\drie_p\komadm in.db\komadmin\komadmtest\komadm_app\komadm_env\lib\site packages\django\core\management\commands\migrate.py”,第203行,在handle中 fake_initial=假_initial, 文件“c:\applicationdef\za\co\drie_p\komadm in.db\komadmin\komadmtest\komadm_app\komadm_env\lib\site packages\django\db\migrations\executor.py”,第117行,位于migrate中 state=self.\u迁移所有\u转发(state,plan,full \u plan,fake=fake,fake \u initial=fake \u initial) 文件“c:\applicationdef\za\co\drie_p\komadm.db\komadm\komadmtest\komadm_app\komadm_env\lib\site packages\django\db\migrations\executor.py”,第147行,位于“migrate\u all”转发中 state=self.apply_迁移(state,migration,fake=fake,fake_initial=fake_initial) 文件“c:\applicationdef\za\co\drie_p\komadm in.db\komadmin\komadmtest\komadm_app\komadm_env\lib\site packages\django\db\migrations\executor.py”,第244行,在apply_migration中 state=migration.apply(状态,模式编辑器) 文件“c:\applicationdef\za\co\drie_p\komadm in.db\komadmin\komadmtest\komadm_app\komadm_env\lib\site packages\django\db\migrations\migration.py”,第124行,位于apply中 operation.database_forwards(self.app_label,schema_editor,old_state,project_state) 数据库中的文件“c:\applicationdef\za\co\drie_p\komadm in.db\komadmin\komadmtest\komadm_app\komadm_env\lib\site packages\django\db\migrations\operations\fields.py”,第150行,转发 schema_editor.remove_field(从_model,从_model.meta.get_field(self.name))。 文件“c:\applicationdef\za\co\drie_p\komadm in.db\komadmin\komadmtest\komadm_app\komadm_env\lib\site packages\django\db\backends\sqlite3\schema.py”,第318行,在remove_字段中 self.\u重新创建表格(model,delete\u field=field) 文件“c:\applicationdef\za\co\drie_p\komadm in.db\komadm\komadmtest\komadm_app\komadm_env\lib\site packages\django\db\backends\sqlite3\schema.py”,第257行,在重新创建表中 自我创建模型(临时模型) 文件“c:\applicationdef\za\co\drie_p\komadm in.db\komadmin\komadmtest\komadm_app\komadm_env\lib\site packages\django\db\backends\base\schema.py”,第300行,位于create_模型中 columns=[模型_meta.get _field(field).column for field in fields] 文件“C:\applicationdef\za\co\drie_p\komadm in.db\komadmin\komadmtest\komadm_app\komadm_env\lib\site packages\django\db\backends\base\schema.py”,第300行,位于 columns=[模型_meta.get _field(field).column for field in fields] 文件“c:\applicationdef\za\co\drie_p\komadm in.db\komadmin\komadmtest\komadm_app\komadm_env\lib\site packages\django\db\models\options.py”,第566行,在get_字段中 raise fielddoesnotexist(“%s没有名为“%s”的字段%(self.object\u name,field\u name)) django.core.exceptions.fielddoesnotexist:个人没有名为“persnumber”的字段

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38615
 
163 次点击  
文章 [ 1 ]  |  最新文章 4 年前
hcd
Reply   •   1 楼
hcd    5 年前

既然没有人回答,我会(但我也在学习)。

是否检查此字段是否仍然存在?(例如在shell中)。

我将建议手动删除关联的迁移文件,然后重试(makemigrations+migrate)。
我正在谈论的迁移文件可以在myproject/myapp/migrations/00xx_something.py中找到。

如果它仍然不起作用,您可以直接删除数据库中的表和关联的迁移文件。