Skip to main content
 首页 » 编程设计

python之django 在保留数据的同时将 OneToOneField 移动到外键

2024年08月21日33luoye11

我刚刚从另一个开发人员那里接手了一个 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 )

请您参考如下方法:

如果您将 OneToOneField 更改为 ForeignKey,那么您将能够为多个用户和提供商选择相同的地址。

class Provider: 
    address=models.ForeignKey(Address) 
 
class User: 
    address=models.ForeignKey(Address) 

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