【问题标题】:django programming - "create" methods in admin, model or viewdjango 编程 - 在管理、模型或视图中“创建”方法
【发布时间】:2015-09-10 08:06:29
【问题描述】:

基线:我正在构建一个基于 django 的应用程序,该应用程序大量使用管理界面,因为它为我节省了大量开发自己的 CRUD 例程的工作。到目前为止,我遇到了几种情况,其中我的模型包含一些一般信息(例如父母)并且通常与派生模型(例如孩子)具有外键关系。

我意识到我有时会实现我的例程以在管理类中创建子对象,有时在模型类中(从某些管理例程中调用方法),有时甚至在视图类中(例如,作为对 POST 请求的反应在一些自定义表格上)。现在感觉,我的设计不是很一致(更改一些模型参数的影响分布在很多文件中),我应该在它变得一团糟之前进行重构。

那么最好的方法是什么?应该将创建/修改相关对象的方法集中在哪里(请记住,我经常想提供一些与流程相关的反馈消息)?

【问题讨论】:

    标签: python django oop crud


    【解决方案1】:
    • 如果您的代码与Model 类有关,请将其添加到models.py。当必须将类添加到数据库时,这是有意义的 (migrations)
    • 如果您的代码与views 相关,请将其附加到views.py。这在代码处理请求时很有意义。
    • 如果您的代码与admin 相关,请将其附加到admins.py。当代码与管理界面相关时,这是有道理的。
    • 如果您的代码是通用的,在多个地方使用,refactor 将其放入单独的文件中,import 该文件在其他位置。

    您的用例对我来说并不完全清楚,所以我在这里暗中尝试-您可以在models.py 中使用Models 并创建一个单独的文件来为具有子对象的模型创建对象包含与使用给定数据创建父子对象相关的代码。然后将其用作管理员中的导入并在适用的情况下查看。

    类似:

    # foo in views.py and admin.py
    def foo():
        data = {} # get all data
        make_parent_child(data) # create parent-child objects
    

    【讨论】:

    • 我将您的想法解释为:识别并收集所有实际分布的对象创建/更新放置实际需要处理的数据并将所有实际完成工作的方法放在一个(新)文件。我倾向于直接将它们作为模型类方法,但有点担心我的模型类会包含一些模型通常不知道的对象引用(比如请求或管理,我需要它们来触发一些消息用户)。
    • 我认为在类本身中包含与模型相关的所有方法是可以的,只要有明确的结构和原因,并且不会太乱处理。如果一个类中有太多方法,那么您可以将它们重构到一个单独的文件中。如果方法中有太多重复,请考虑抽象方法以便将它们用于多个模型。
    猜你喜欢
    • 2020-10-12
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多