将复杂的python对象映射到django模型

时间:2009-10-24 19:01:49

标签: python django

我的应用程序中有一个类结构,目前使用django进行演示。我根本没有使用模型层, - 数据库交互例程是手写的。

但是,我正在考虑实际使用django充分发挥其潜力并实际使用数据库抽象层的可能性。问题是如何最好地将我现有的类结构与模型层集成。

示例类:

class UpperClass(base):
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2
        # attr1 and attr2 are actually instances of, say, 
        # CustomType1 and CustomType2

播种这里是我如何将其映射到django模型:

class UpperClass(models.Model):
    attr1 = CustomType1Field(...)
    attr2 = CustomType2Field(...)

这很简单 - 所有的序列化和验证都已经编写好了,所以要想成为CustomType1和CustomType2的自定义字段类就不难了。

真正的问题是,我在哪里放置实际UpperClass的自定义(非数据库相关)行为。根据我的理解,模型用于“将内容输入和输出数据库”,但行为在哪里呢?我是否将非数据库相关的方法嵌入到UpperClass的Model实例中?真的,我在这里不知所措。希望这至少对你有意义。

2 个答案:

答案 0 :(得分:3)

这在某种程度上取决于您要编码的具体行为。在大多数情况下,您应该尝试将每个对象的行为放入模型类中。毕竟,这是一个普通的Python类,所以你可以给它任何你想要的方法。你需要考虑持久性,当然,例如通过避免超出模式中指定的成员数据。

答案 1 :(得分:0)

这主要是一个哲学问题:MVC以及你如何选择实现它。可以说这里没有正确的方法,但假设您希望模型对象都以某种方式表现,无论与它们交互的视图如何,将此行为附加到模型是有意义的。如果行为仅特定于某个视图,并且还有许多其他视图与模型交互,那么将它附加到视图可能更有意义。