首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

关于 django model 外键到第三方插件生成表的问题

  •  
  •   piaochen0 · 125 天前 · 671 次点击
    这是一个创建于 125 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我们的项目用了一些第三方的插件,会在数据库里生成一些表,例如表 A,B。我最近做的功能,自己建的表 C,表 C 里两个字段,会外键到表 A,B 的 ID。

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

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

    或者有没有什么更好的方法?
    6 回复  |  直到 2019-06-23 22:16:15 +08:00
        1
    wrq   125 天前   ♥ 1
    你自己给表 A B 建 orm model 不就可以了
        2
    piaochen0   125 天前
    @wrq 自己给第三方建 orm 的 model,migrate 的时候,不就会同步到数据库里面去了?这样会跟插件自己的库重复了吧? django 新手,求指教
        3
    wd   125 天前 via iPhone
    @piaochen0 #2 第三方的按说你也可以找到他的 model 引入的吧?
        4
    wrq   125 天前
    @piaochen0 orm 是把表映射成一个对象, 就可以用操作对象的方式进行 curl. 因为 django 不知道自建的 model 在数据库中已经存在表了, 所以在加完 model 后的第一次 make migration 要加上 --fake-initial. [文档链接在这里]( https://docs.djangoproject.com/en/2.2/ref/django-admin/#cmdoption-migrate-fake-initial) ,之后就能正常 curl 了. 我也不太确定我说的对不对..
        5
    banxi1988   124 天前
    1. 第三方插件有 Model 找到 Model 引用.
    2. 第三方插件没有 Model 但是却会建表(一般说明不是 Django 插件). 可以自行针对表建模.
    只需要在自行建模中,设置 `managed` 选项,示例如下: (更多解释请 Google)

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

    ```
        6
    xpresslink   122 天前
    数据库里面已经存在 AB 表的情况下,可以用直接用 sql 语句或者 GUI 工具在数据库里建 C 表。
    然后用下面命令
    python manage.py inspectdb > /project/app/models.py
    命令直接反向生成 model 代码就行了。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4366 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 29ms · UTC 05:55 · PVG 13:55 · LAX 22:55 · JFK 01:55
    ♥ Do have faith in what you're doing.