Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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中删除模型?_Django - Fatal编程技术网

如何从django中删除模型?

如何从django中删除模型?,django,Django,在Django中,如何删除已同步到数据库中的模型 例如,在Django教程页面中有以下代码 from django.db import models class Poll(models.Model): question = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') class Choice(models.Model): poll = models

在Django中,如何删除已同步到数据库中的模型

例如,在Django教程页面中有以下代码

from django.db import models

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice = models.CharField(max_length=200)
    votes = models.IntegerField()

然后我使用
python manage.py sql polls
python manage.py sql polls
将表创建到数据库中。但是,如果我做错了什么,不想再使用那个模型,那该怎么办呢。删除它的语法是什么?

没有语法。Django不会删除表或列。您必须手动更改数据库或使用诸如South之类的迁移工具


如果您正在使用教程,更简单的方法是删除您的sqlite数据库文件并再次运行同步。

Django通过
syncdb
进行的数据库处理纯粹是加法:将添加任何新模型,但不会删除删除的模型,也不会修改修改的模型


如果您没有任何要保留的数据,只需删除并重新创建数据库即可:如果您有任何要保留的数据,或者即使您打算保留任何要保留的数据,我无法强烈建议您使用迁移工具:这是我所从事的每个项目的事实标准。

如果您不想删除并重新同步当前数据库,最好的方法是手动从模型中删除表:

$ python manage.py dbshell

> (Inside the DB shell)
> DROP TABLE {app-name}_{model-name};

为什么不直接从models.py文件中删除模型呢?当你跑的时候

python manage.py makemigrations


迁移文件应该用删除的模型更新。

注释掉定义模型的类为我做了这件事。一旦我完成并运行了
python manage.py makemigrations
, 我的回答是:
-删除模型MyModel

后来用DB浏览器检查,它实际上被删除了

由于迁移命令处理模型(数据库),您可以执行以下步骤

第一类

python manage.py makemigrations应用程序_name#它将重组您的模型

然后键入

python manage.py migrate app_name#它将应用于重组数据库

示例: 我有帖子和PostDetail模型, 后来,我想从Posts模型中删除POSTDail模型和一些字段(列)

我只需运行migrations和migrate命令,并签入Mysql数据库。它工作得很好


希望它也适用于您。

最简单的解决方案是从models.py中删除您的模型,然后运行

python3 manage.py makemigrations

(注意:从导入模型的任何地方删除模型,如admin.py、views.py或导入模型的任何其他文件)

如果您面临将更改更新到数据库的问题,则可以直接运行此命令

python manage.py migrate --run-syncdb

@starcorn尝试django-admin.py flushAs更新到当前版本1.11
python manage.py迁移你的应用程序zero
将撤消你的migration@Sarit我认为“零”总是存在的,至少我可以在Django 1.7上找到它的引用。但是无论如何,这个问题已经没有意义了,因为syncdb命令已经被弃用并从Django中删除。谢谢。这确保在执行python manage.py makemigrations之后,将多个用外键删除的表按顺序放置,然后执行python manage.py migrate以从数据库中删除模型Now manage.py migrate抱怨原始表不再存在。对于最终出现在这里的人:在Django()的当代版本中,当您进行迁移并运行迁移时,会自动处理这些问题。来自:“Django可以为您创建迁移。对您的模型进行更改(例如,添加字段并删除模型),然后运行makemigrations:…”。另见相关问题。