我正在使用django,我面临一个小问题.我想在manage.py中使用'migrate'命令但是当我尝试时,我收到此错误消息:
Unknown command: 'migrate'
Type 'manage.py help' for usage.
Run Code Online (Sandbox Code Playgroud)
我已安装南部(我用pip安装它),但我仍然无法使用此命令.我不知道该怎么办.
谢谢您的帮助!
我正在南方编写数据迁移来修复我在早期代码中搞砸的一些非规范化数据.找出错误字段的正确值的方法是在django模型类上调用静态方法.代码如下所示:
class Account(models.Model):
name = models.CharField()
@staticmethod
def lookup_by_name(name):
# There's actually more to it than this
return Account.objects.get(name=name)
class Record(models.Model):
account_name = models.CharField()
acct = models.ForeignKey('Account')
Run Code Online (Sandbox Code Playgroud)
...
class Migration(DataMigration):
def forwards(self, orm):
# Fixing Records with the wrong FK to Account
for record in orm.Record.objects.all():
record.acct = orm.Account.lookup_by_name(record.account_name)
record.save()
Run Code Online (Sandbox Code Playgroud)
但这失败了
AttributeError: type object 'Account' has no attribute 'lookup_by_name'
我猜南方只是不支持@staticmethod模型类的?
尝试直接导入帐户失败,除非我也直接导入Record并完全忽略ORM对象.这是一个安全的选择,因为它是一个数据迁移,架构没有改变?或者我应该手动运行此修复,而不是在南迁移的情况下.
对我的Django应用程序模型进行了一些更改,并使用South在我的开发机器上迁移它们(迁移0004到0009).但是当尝试在服务器上迁移这些更改时,我收到"GhostMigrations"错误.
没有太多好的内容来解释ghost迁移是什么,或者如何调试它.Google对此问题没有帮助,其他提到幽灵迁移的SO问题也没有涵盖这一点(这里最有用的问题主要是关于工作流程).django-south IRC中有用的人对此进行了关于鬼迁移的说法:"这意味着南方的历史(数据库中的一个表)记录了它认为已应用的两个迁移,但其迁移文件无法找到" .我现在想弄清楚如何完成调试.
在此先感谢您的帮助.
这是错误:
Traceback (most recent call last):
File "manage.py", line 14, in <module>
execute_manager(settings)
File "/home/username/webapps/myproject/lib/python2.6/django/core/management/__init__.py", line 438, in execute_manager
utility.execute()
File "/home/username/webapps/myproject/lib/python2.6/django/core/management/__init__.py", line 379, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/username/webapps/myproject/lib/python2.6/django/core/management/base.py", line 191, in run_from_argv
self.execute(*args, **options.__dict__)
File "/home/username/webapps/myproject/lib/python2.6/django/core/management/base.py", line 220, in execute
output = self.handle(*args, **options)
File "/home/username/lib/python2.6/South-0.7.3-py2.6.egg/south/management/commands/migrate.py", line 105, in handle
ignore_ghosts = ignore_ghosts,
File "/home/username/lib/python2.6/South-0.7.3-py2.6.egg/south/migration/__init__.py", line 171, in migrate_app
applied = check_migration_histories(applied, delete_ghosts, ignore_ghosts)
File "/home/username/lib/python2.6/South-0.7.3-py2.6.egg/south/migration/__init__.py", line 88, in check_migration_histories
raise exceptions.GhostMigrations(ghosts) …Run Code Online (Sandbox Code Playgroud) 我基本上是想借此创建一个PHP应用程序(笨框架)使用现有的MySQL数据库结构和反向IT工程师到Django应用程序.有一些工具可以做到这一点吗?南迁可能吗?
我目前的项目正在扩展地理位置,所以我正在尝试集成GeoDjango并为初学者导入一些shapefile.我的设置包括以下内容:
South 正在整个项目中使用现在我已经在我的区域的新应用程序中创建了一个GeoDjango模型.像往常一样,我已经完成了./manage.py schemamigration --initial,当我尝试做的时候./manage.py migrate $my_new_app --database="gis",它失败了django.db.utils.DatabaseError: no such table: south_migrationhistory,这是我猜的正确,因为south_migrationhistory在我的主数据库中.
有没有人有这样的设置经验,可以帮助我吗?
编辑:我已经改变了标题,因为我意识到这个问题实际上不是GeoDjango特有的.
如果我有一个不可为空的模型字段,删除它,并创建一个迁移,那么迁移将变为不可逆:
考虑以下模型:
class Foo(models.Model):
bar = models.TextField()
test = models.TextField() # This field is to go away, bye-bye!
Run Code Online (Sandbox Code Playgroud)
和迁移:
# app/migrations/003_remove_foo_test.py
class Migration(migrations.Migration):
dependencies = [
('app', '0002_foo_test'),
]
operations = [
migrations.RemoveField(
model_name='foo',
name='test',
),
]
Run Code Online (Sandbox Code Playgroud)
取消应用此迁移会引发异常:
$ src/manage.py migrate app 0002
Operations to perform:
Target specific migration: 0002_foo_test, from app
Running migrations:
Unapplying app.0003_remove_foo_test...Traceback (most recent call last):
...
django.db.utils.IntegrityError: column "test" contains null values
Run Code Online (Sandbox Code Playgroud)
当然,这是预期的行为,它是清楚记录的,我不是在问为什么会发生这种情况:
请记住,当反转时,这实际上是在模型中添加一个字段; 如果该字段不可为空,则可能使该操作不可逆转(除了任何数据丢失,这当然是不可逆转的).
但是,我们都会犯错误,有时我们只需要以某种方式反转字段删除,即使这意味着手动为所有反转的非空字段提供临时存根值.例如,南迁移可选择允许逆转此类操作(通过询问开发人员是否为恢复的字段提供默认值,或禁止反向迁移),这似乎不是所有新奇特的Django 1.7迁移的情况. .
问题:使用Django …
我有一个创建新表的迁移003,但由于某种原因,South在执行迁移后没有创建新表:我正在执行以下命令:
[kelp@web187 goals]$ python2.7 manage.py migrate main 0003_auto__add_nudge
Running migrations for main:
- Migrating backwards to just after 0003_auto__add_nudge.
< main:0006_auto__add_field_nudge_status
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
django.db.utils.DatabaseError: relation "main_nudge" does not exist
Run Code Online (Sandbox Code Playgroud)
它不存在,因为迁移003应该创建它.为什么我会收到此错误?
我想在我的数据库中清除一个表,所以我放弃了表.通常我会manage.py syncdb重新创建它.但是,这里的答案说不再使用syncdb了.那么,我该怎么做呢?
我需要在我的Django模型的某个字段中添加一个FULLTEXT索引,并了解没有内置功能来执行此操作,并且必须在mysql(我们的后端数据库)中手动添加这样的索引.
我希望在每个环境中创建此索引.我理解模型更改可以用Django南迁移来处理,但有没有办法在迁移过程中添加这样的FULLTEXT索引?
通常,如果需要运行任何自定义SQL,我如何将其作为迁移的一部分.
谢谢.
我是django的新手,并试图将一个外键带回给受让人和记者的用户.但是,当我尝试将更改应用于南方时,我得到了错误
ValueError: The database backend does not accept 0 as a value for AutoField.
Run Code Online (Sandbox Code Playgroud)
我的型号代码:
class Ticket(models.Model):
title = models.CharField(max_length=80)
text = models.TextField(blank=True)
prioritys = models.ForeignKey(Prioritys)
ticket_created = models.DateTimeField(auto_now_add=True)
ticket_updated = models.DateTimeField(auto_now=True)
assignee = models.ForeignKey(User, null=True, related_name='assignee')
reporter = models.ForeignKey(User, null=True, related_name='reporter')
def escaped_text(self):
return markdown.markdown(self.text)
def __unicode__(self):
return self.text
Run Code Online (Sandbox Code Playgroud) django ×10
django-south ×10
python ×4
mysql ×2
database ×1
django-1.7 ×1
django-orm ×1
migration ×1
sqlite ×1