Python中关于Django model外键关联到第三方插件生成表的问题

我们的项目用了一些第三方的插件,会在数据库里生成一些表,例如表 A,B。我最近做的功能,自己建的表 C,表 C 里两个字段,会外键到表 A,B 的 ID。

我自己建的表 C,可以用 ORM 来在代码中建 model,然后同步到数据库里。但是表 A 和表 B,因为是插件自带的,所以代码中没有 model。所以外键不怎么好做。

这种情况下,是不是手动建表 C,不使用 orm 的方式,而是直接使用原生 sql 对表 C 进行增删改查比较合适?

或者有没有什么更好的方法?
Python中关于Django model外键关联到第三方插件生成表的问题

7 回复

你自己给表 A B 建 orm model 不就可以了


我无法理解你的问题

自己给第三方建 orm 的 model,migrate 的时候,不就会同步到数据库里面去了?这样会跟插件自己的库重复了吧? django 新手,求指教

#2 第三方的按说你也可以找到他的 model 引入的吧?

orm 是把表映射成一个对象, 就可以用操作对象的方式进行 curl. 因为 django 不知道自建的 model 在数据库中已经存在表了, 所以在加完 model 后的第一次 make migration 要加上 --fake-initial. [文档链接在这里]( https://docs.djangoproject.com/en/2.2/ref/django-admin/#cmdoption-migrate-fake-initial) ,之后就能正常 curl 了. 我也不太确定我说的对不对…

  1. 第三方插件有 Model 找到 Model 引用.
    2. 第三方插件没有 Model 但是却会建表(一般说明不是 Django 插件). 可以自行针对表建模.
    只需要在自行建模中,设置 managed 选项,示例如下: (更多解释请 Google)

    py<br>class YouModel(models.Model):<br> you_field = models.CharField(...)<br> class Meta:<br> managed = False # 说明不需要由 Django 处理建表等操作.<br><br>

数据库里面已经存在 AB 表的情况下,可以用直接用 sql 语句或者 GUI 工具在数据库里建 C 表。
然后用下面命令
python manage.py inspectdb > /project/app/models.py
命令直接反向生成 model 代码就行了。

回到顶部