当我第一次开始使用Django时,我愚蠢地创建了一个模型(让我们称之为Foo
)并明确地给它一个id
字段,不知道django是否自动添加了它。我还有一个模型(让我们称之为Bar
)与该模型的外键。我想更新内容并删除这个foo_id
字段,所以我将其删除,在南方运行模式迁移并运行更改。我现在遇到的问题是我的Bar
模型在我尝试从DoesNotExist: Foo matching query does not exist.
调用foo
时错误{/ 1}}
如果我查看该对象,则会有foo
和foo_id
的属性。 foo_id
会返回一个ID,但当我尝试调用foo
时,95%的人会返回错误。
class Foo(models.Model):
foo_id = models.IntegerField(primary_key=True)
class Bar(models.Model)
foo = models.ForeignKey(Foo)
schemamigration
class Migration(SchemaMigration):
def forwards(self, orm):
# Deleting field 'Foo.foo_id'
db.delete_column(u'foo', 'foo_id')
# Adding field 'Foo.id'
db.add_column(u'foo', 'id',
self.gf('django.db.models.fields.AutoField')(default=None, primary_key=True),
keep_default=False)
答案 0 :(得分:0)
需要做的是迁移文件中的数据转换,这需要一些自定义
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'Foo.id'
db.add_column(u'foo', 'id',
self.gf('django.db.models.fields.AutoField')(default=None),
keep_default=False)
for bar in Bar.objects.all():
bar.foo_id = bar.foo.id
bar.save()
# Deleting field 'Foo.foo_id'
db.delete_column(u'foo', 'foo_id')
db.create_primary_key('food', 'id')
它真的未经测试,但可能接近所需。