Ale*_*lex 19 django postgresql django-models python-3.x
Python 3,Django 1.8.5,Postgres
我有一个Sites一直运作良好的模型.我最近尝试添加字段,airport_code和迁移数据.
class Site(BaseModel):
objects = SiteManager()
name = models.CharField(max_length=200, unique=True)
domain = models.CharField(max_length=200, unique=True)
weather = models.CharField(max_length=10)
nearby_sites = models.ManyToManyField('self', symmetrical=False, blank=True)
users = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True)
facebook = models.URLField(max_length=200)
twitter = models.URLField(max_length=200)
header_override = models.TextField(blank=True)
email_header_override = models.TextField(blank=True)
timely_site_tag_id = models.IntegerField()
timely_featured_tag_id = models.IntegerField()
timely_domain = models.CharField(max_length=255)
sitemap_public_id = models.CharField(max_length=255)
state = models.CharField(max_length=24)
airport_code = JSONField()
Run Code Online (Sandbox Code Playgroud)
但是,当我跑的时候我遇到makemigrations了一个错误:
django.db.utils.ProgrammingError: column sites_site.airport_code does not exist
LINE 1: ..._site"."sitemap_public_id", "sites_site"."state", "sites_sit...
当然,这没有意义,因为当我试图在迁移中创建它时,该列显然不存在.
我已经看到很多关于Stack Overflow上的这个错误的问题没有得到解答,或者有一个解决方案来手动创建迁移文件,或者销毁和重建数据库.这不是一个好的解决方案.
Nex*_*xus 14
运行makemigrations后,请务必逐步完成堆栈跟踪.
在我的情况下,我注意到它通过调用一个完全不同的应用程序中的forms.py中包含的Form来跟踪,这恰好调用了我试图为其创建新迁移的模型.
将Forms类从forms.py移动到views.py中可以解决问题.
通过在settings.py中注释掉INSTALLED_APPS中的django调试工具栏,我解决了这个错误.我不确定为什么调试工具栏是罪魁祸首,但在我评论之后,我能够运行makemigrations并且migrate没有问题.
希望这有助于某人,因为我花了12个小时试图解决这个问题.
我也遇到了这个问题,@Nexus 的回答有所帮助。我想我会在这里提供我的具体案例的详细信息,以便更好地说明问题的原因。这对我来说似乎是一个潜在的错误。
我有一个模型Brand如下:
class Brand(BaseModelClass):
name = CharField(max_length=256, unique=True)
website = ForeignKey(URL, on_delete=CASCADE, null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)
python manage.py makemigrations添加Boolean字段后我正在运行,如下所示:
class Brand(BaseModelClass):
name = CharField(max_length=256, unique=True)
website = ForeignKey(URL, on_delete=CASCADE, null=True, blank=True)
trusted = Boolean(default=True)
Run Code Online (Sandbox Code Playgroud)
运行makemigrations命令时,我收到类似于 OP 的错误:
django.db.utils.ProgrammingError: column appname_brand.trusted does not exist
Run Code Online (Sandbox Code Playgroud)
根据@Nexus 的建议,我逐行浏览了堆栈跟踪,假设这不是 Django 的一些核心问题。事实证明,在其中一个应用程序forms.py文件中,我有以下内容:
choices={(str(brand.id), brand.name) for brand in Brand.objects.all()}
Run Code Online (Sandbox Code Playgroud)
解决方案是简单地注释掉该行, run manage.py makemigrations,然后 run manage.py migrate。之后,我取消了该行的注释,所有内容和表单的功能都像以前一样工作。
就我而言,那是因为我设置了unique_together约束。
当我想删除一个字段时,自动生成的迁移尝试在删除unique_together约束之前先删除该字段。
我要做的是在迁移文件中手动向上移动migrations.AlterUniqueTogether约束,以便django首先删除约束,然后再尝试删除字段。
我希望这可以帮助某人。
| 归档时间: |
|
| 查看次数: |
14522 次 |
| 最近记录: |