我会简单地说:为了按照 Django 应用程序的精神和理念工作,一个应用程序可以从另一个应用程序内部导入模型吗?比如说,用户统计应用程序将从用户应用程序导入模型,例如: from users.models import users
5 回答
答案是肯定的。django 项目中的一个应用程序从另一个应用程序导入模型是完全可以的。django 项目的强大之处在于应用程序及其交互。
还要确保您有实用程序应用程序从更通用的应用程序而不是其他方式导入模型。所以“userstatistics”应用程序应该从“users”应用程序导入模型,但“users”应用程序不应该依赖“userstatistics”。
如果您的应用程序正在从 3rd 方应用程序(比如说 django-piston)导入模型,请务必在需求文件中指定。
如果您正在构建一个没有机会向公众发布的内部应用程序,那么当然,随心所欲。
如果您正在构建一个内部应用程序,该应用程序几乎没有机会向公众发布,但可能会被未来/当前的开发人员使用,当然,但请务必记录应用程序正常运行所需的内容。
如果您正在构建一个公开发布的应用程序,请尝试使其保持独立(并且依赖 django-internals,即尽可能使用 django 提供的内容)。如果您确实需要第三方应用程序才能工作,或者第三方应用程序可以使您的代码更易于管理,那么请确保包含依赖项,但请务必记录所有要求和必要的设置。
在大多数情况下,只要您有足够的文档,您几乎可以做任何您想做的事情。
但是,我确实不得不质疑制作User
与 django 的 builtin 同名的模型是否合理auth.User
。
您可以尝试使用继承更好地扩展 Django 用户模型。您将使用添加了自定义字段的 django 用户,因此您将拥有所有应用程序的相同用户。
您可以直接在 app2/models.py 中导入模型。通常你可能需要一个外键,看起来像
models.ForeignKey('app1.ModelClass1', on_delete=models.CASCADE, related_name='modelclass2')
不要这样做。它们将具有相同的应用程序名称,并且 ORM 将被混淆。请改用抽象模型,并从中派生出两者。