django:使用未定义关系的预制mysql数据库

vm0i2vca  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(279)

我有一个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'
j2datikz

j2datikz1#

来自django文档中的相关名称:
用于从相关对象返回到此对象的关系的名称。它也是相关的\u query \u name(用于目标模型的反向过滤器名称的名称)的默认值。
在您的场景中,添加公司模型,然后,在查询模型中 ForeignKey ,指定 related_name 具有要链接的公司属性的字段名。

class Company(models.Model):
    id = models.AutoField()
    ...

class Inquiry(models.Model):
    id = models.AutoField()         
    company_id=models.ForeignKey(to=Company, related_name="id", null=True, blank=True)
    class Meta:
        managed = True
        db_table = 'inquiry'
w6mmgewl

w6mmgewl2#

请参见以下链接:django-遗留数据库
在你创建了你的 models.py ,则需要执行 migrate . 第一次之后 migrate ,进入 models.py 做你需要的编辑!
编辑/添加
基本上:

python manage.py inspectdb > models.py

删除 managed = Falseclass Meta: 每种型号

python manage.py migrate

将其视为django从一开始就创建的:)
编辑2
再说一次,我的解决方案应该有效。你试图定义关系的方式并不是django的关系所喜欢的定义方式。要将查询链接到公司,这应该起作用:

class Company(models.Model):
    company_name = models.CharField(max_length=50) #django automatically creates a PK/ID field
class Inquiry(models.Model):
    company = models.ForeignKey(Company, on_delete=models.CASCADE, null=True, blank=True) #null and blank params not required

django将负责在db中建立mysql关系,这就是使用django orm的全部目的。
在django中定义字段后,运行迁移:

python manage.py makemigrations
python manage.py migrate

django应该相应地修改mysql中的表(我不是100%确定)

相关问题