我有一个mysql数据库,里面有数据,没有定义关系。我想要的是在django项目中使用这个数据库,并且我想要它定义关系。有些字段应该是foreignkeys,但定义为integerfields。所以基本上我想把它们改成外国钥匙。
我所拥有的:
company_id = models.IntegerField(blank=True, null=True)
我想要的是:
company_id = models.ForeignKey('Company', on_delete=models.CASCADE)
class Inquiry(models.Model):
id = models.AutoField()
company_id = models.IntegerField(blank=True, null=True)
class Meta:
managed = False
db_table = 'inquiry'
我正在尝试的是:
class Inquiry(models.Model):
id = models.AutoField()
company_id=models.ForeignKey('Company',on_delete=models.CASCADE,null=True)
class Meta:
managed = True
db_table = 'inquiry'
2条答案
按热度按时间j2datikz1#
来自django文档中的相关名称:
用于从相关对象返回到此对象的关系的名称。它也是相关的\u query \u name(用于目标模型的反向过滤器名称的名称)的默认值。
在您的场景中,添加公司模型,然后,在查询模型中
ForeignKey
,指定related_name
具有要链接的公司属性的字段名。w6mmgewl2#
请参见以下链接:django-遗留数据库
在你创建了你的
models.py
,则需要执行migrate
. 第一次之后migrate
,进入models.py
做你需要的编辑!编辑/添加
基本上:
删除
managed = False
从class Meta:
每种型号将其视为django从一开始就创建的:)
编辑2
再说一次,我的解决方案应该有效。你试图定义关系的方式并不是django的关系所喜欢的定义方式。要将查询链接到公司,这应该起作用:
django将负责在db中建立mysql关系,这就是使用django orm的全部目的。
在django中定义字段后,运行迁移:
django应该相应地修改mysql中的表(我不是100%确定)