如果我有从遗留代码中生成的现有类(从一些UML模型生成),那么将它们与Django 模型类集成的最佳方法是什么?
到目前为止,我已经考虑过使用Django自定义字段来序列化类,并让该类处理持久性。(这样做的缺点是,其他直接访问数据库的应用程序-如果需要这样的话-将不得不反序列化这个字段,以便访问数据。)
如果有人可以提出一些替代上述方案-以某种方式,围绕我现有的类的持久性可以“交换”,这将是非常感谢的!
发布于 2011-06-06 06:09:47
如果您想将遗留应用程序迁移到django,我同意@chrisdpratt,您应该尝试将类转换为Django模型。这需要付出很大的努力,所以当您准备好之后,您可以遵循以下步骤:
myapp**").Optionally,中创建新的django模型,您可以再次使用检查b从db中自动获得基本模型。但是,请确保将模型重命名为标准Django外观,并删除任何不必要的字段和属性。您可以将它用作步骤3的脚本的框架:
# legacy/management/commands/importlegacydb.py
from django.core.management.base import NoArgsCommand
import myapp.models as M
import legacy.models as L
import sys
write = sys.stdout.write
def copy_fields(old, new, mapping):
for old_key, new_key in mapping.items():
value = getattr(old, old_key)
if type(value) is str:
value = value.strip()
if type(new_key) is tuple:
value = new_key[0](value)
new_key = new_key[1]
else:
if new_key == "name":
value = value[0].upper() + value[1:]
setattr(new, new_key, value)
def import_table(old_class, new_class, mapping):
write("importing %s " % old_class.__name__)
lookup = {}
l = old_class.objects.all()
for old in l:
new = new_class()
copy_fields(old, new, mapping)
new.save()
lookup[old.id] = new.id
write (".")
print " Done."
return lookup
class Command(NoArgsCommand):
help = "Import data from legacy db."
def handle_noargs(self, **options):
"""
Read data from legacy db to new db.
"""
print "Importing legacy data"
import_table(L.X, M.X, { 'old_field' : 'new_field', 'old_field2' : 'new_field2'})
import_table(L.Y, M.Y, { 'old_field' : 'new_field'})
print "Done."https://stackoverflow.com/questions/6224208
复制相似问题