代码之家  ›  专栏  ›  技术社区  ›  shylent

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

  •  3
  • shylent  · 技术社区  · 16 年前

    我的应用程序中有一个特定的类结构,它目前使用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
    

    Sow以下是我如何将此映射到Django模型:

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

    这就足够简单了——所有的序列化和验证资料都已经写好了,所以将CustomType1和CustomType2的自定义字段类结合起来一点也不困难。

    真正的问题是,我应该把实际上流类的自定义(与数据库无关)行为放在哪里?在我的理解中,有一些模型用于“将数据输入和输出数据库”,但是这些行为会去哪里呢?我是否将与数据库无关的方法嵌入到upperclass的模型实例中?真的,我在这里不知所措。希望这至少对你有部分意义。

    2 回复  |  直到 8 年前
        1
  •  3
  •   Kurt Peek    8 年前

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

        2
  •  0
  •   Ben Regenspan    16 年前

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