【问题标题】:How to use MySQL view in django?如何在 django 中使用 MySQL 视图?
【发布时间】:2015-08-15 05:43:04
【问题描述】:

我想使用我在 MySQL 中创建的视图作为 Django 中的模型。我想在我的 Intranet 站点上显示我公司正在进行的未完成流程的状态。我在论坛上只找到了相当老的条目,那么有没有一种简单的方法可以通过syncdb 传递 MySQL 视图?

如果没有,假设我有两个表:

  1. 子流程的硬性里程碑,例如:
  2. 上表中包含进程和子进程信息作为 ID 的表:

  3. 我在 MySQL 中的视图会做类似的事情。 4) 所以结果是:

我想在我的 django APP 中只有一个模型,结果 4 号。 得到这个的最快方法是什么?自定义 SQL 查询?或者我需要有progress_tbproc_tb 的模型并将它们组合起来吗?我如何多次引用同一张表(如在 Access/MySQL 中,我有 progress_tbprogress_tb_1 等)?到目前为止,我只知道如何进行过滤查询,但是如何从连接表中“添加”几列?我尝试了 django 的“额外”选项,但我不明白它是如何工作的:(

【问题讨论】:

    标签: python mysql django view


    【解决方案1】:

    您可以通过嵌套的Meta 类上的managed = False 字段声明将您的视图指定为由 Django 管理:

    class MyViewModel(models.Model):
        field1 = models.IntegerField()
        [...]
    
        class Meta:
            managed = False
            db_table = 'MyView' # your view name
    

    managed = False 将导致 python manage.py syncdb 忽略该模型以进行同步。

    【讨论】:

    • 谢谢,我明天试试!即使该视图未被 syncdb 识别,它还能工作吗?我只需要完全按照我的视图命名字段即可?
    • 是的。如果没有syncdb 操作它,它仍然可以工作。这就是managed 字段的设计目的。您没有必须完全按照您的视图命名字段,但如果字段具有良好、易于理解的名称,那么您也许应该这样做。如果要将视图的字段名称与 Django 模型的字段名称分开,可以将 db_column parameter 指定给字段的模型实例化。例如field1 = models.IntegerField(db_column='super_crappy_field_name')
    • 那么我的 MyViewModel 如何知道“field1”实际上是“sub_Proc1_%”而“field2”是“sub_Proc2_%”(来自给定示例)?因为我确实抓住了那个。
    • 好的,sub_Proc1 可以重命名,但不是必须的。如果您不想重命名它,只需执行 sub_Proc1 = models.IntegerField() (或任何正确的模型类型)。如果您确实想要重命名它,请使用字段db_column - sub_Proc1_renamed = models.IntegerField(db_column='sub_Proc1')See db_column documentation.
    • 感谢您的建议 - 我会调查一下 :) 并感谢其余的,它有效!
    猜你喜欢
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 2014-07-09
    • 2020-02-09
    相关资源
    最近更新 更多