【问题标题】:Is this an okay way of doing Django Models这是做 Django 模型的好方法吗
【发布时间】:2016-03-02 05:19:15
【问题描述】:

我正在使用fat models 方法,因此我已将我的models.py 转换为一个包:

+--polls/
|  +--models/
|    +--__init__.py
|    +--__shared_imports.py
|    +--Choice.py
|    +--Question.py

我的问题的主要部分__shared_imports.py:我意识到我们在包中的各个模块中都有共同的导入语句,并决定让该文件进行导入,然后在我的模块中,我这样写:

from __shared_imports.py import *

一切正常,但只是想知道这种方法是否好。非常感谢您对此的看法。

【问题讨论】:

  • 忘记我的__shared_imports.py 的命名,我可以改变它,我的主要问题是关于方法。感谢@volodymr 提出这个问题。
  • __shared_imports.py 中到底是什么?它只是从其他地方导入东西吗?
  • 是的,除了必须在我的模块中重做相同的导入语句,因为在正常的models.py 中,我们会将所有导入都放在一个地方。那有意义吗? @shuttle87 然后我将其余未为包中的各个模块共享的特定导入保留。

标签: python django django-models


【解决方案1】:
  1. 命名模块时仅使用小写。
  2. 不要在模块名称中使用双下划线。
  3. 阅读 PEP8 和 Google Python 风格指南。
  4. 对模块使用不那么冗长的名称。例如:shared_imports.py -> shared.py

知道了。

在这种情况下,您需要导入 __init__.py 中的所有内容。 然后可以将所有名称导出为__all__ = ['Choice', 'Question']

所以,只需要导入模型包就足够了。

示例:__ init __.py

import Choice
import Question

__all__ = ['Choice', 'Question']

【讨论】:

  • 感谢@volodymyr 的回答,但我的主要问题不在于命名,我可以改变它——而是方法。
  • __ init .py ... import Choice import Question __all = ['Choice', 'Question']
  • This 不是我关心的...
【解决方案2】:

避免使用import *,因为它会阻止 pyflakes 等工具确定未定义的变量。

将所有内容移动到子目录中并将其拆分为单独的文件并不是一个坏主意,尽管大多数情况下不需要。当您的 models.py 文件变大时,您应该考虑将项目拆分为更小的应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    相关资源
    最近更新 更多