django在保持数据的同时将OneToOneField移动到ForeignKey

时间:2016-11-23 14:41:05

标签: python django

我刚接手另一位开发人员的Django项目,并试图了解他的所作所为。

如果我理解正确,有人可以告诉我,并指出我的方向很好。

目前模特看起来像这样(简化):

class Address:
    street_name=models.CharField()

class Provider:
    address=models.OneToOneField(Address)

class User:
    address=models.OneToOneField(Address)

但这意味着每个地址都是独一无二的,所以没有人住在同一栋房子里。

对我来说(来自Symfony框架)我会在Provider和User中添加一个OneToMany字段,但在Django中添加一个ForeignKey in Address。

class Address:
    street_name=models.CharField()
    provider=models.ForeignKey(Provider)
    user=models.ForeignKey(User)

class Provider:

class User:

但显然我想保留数据库中的地址信息。

我该怎么做?我应该查看数据迁移(https://docs.djangoproject.com/en/1.8/topics/migrations/#data-migrations

1 个答案:

答案 0 :(得分:3)

如果您将OneToOneField更改为ForeignKey,则可以为多个用户和提供商选择相同的地址。

class Provider:
    address=models.ForeignKey(Address)

class User:
    address=models.ForeignKey(Address)

您需要创建一个迁移并运行它以删除数据库中的唯一约束。不需要进行数据迁移。