社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

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

Phlip • 6 年前 • 342 次点击  

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

我有一个像这样的模型:

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
文章 [ 1 ]  |  最新文章 6 年前
hcd
Reply   •   1 楼
hcd    7 年前

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

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

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

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