我在我的应用程序中有一定的类结构,目前利用django进行演示。我根本没有使用模型层, - 数据库交互例程是手写的。将复杂的python对象映射到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实例中?真的,我在这里不知所措。希望这至少对你有部分意义。
突然间,这对我来说非常有意义。由于模型字段(models.Field的子类)映射回Python类型/类(通过to_python()),所以UpperClass的类实例如何初始化并不重要 - 无论是通过从我的代码直接调用__init__ a = UpperClass(attr1 = foo,attr2 = bar))或通过ORM(a = Upperclass.objects.get(...))。不管怎样,实例名称空间都会被attr1和attr2填充为正确的类型。我对你有正确的理解吗? – shylent 2009-10-24 19:36:43
是的:UpperClass的实例是常规的Python对象,常规属性attr1和attr2(从数据库读出)。 – 2009-10-24 19:45:33
非常感谢您的帮助。 – shylent 2009-10-24 19:48:01