0

我有以下文件说 prof.xml

<include>
  <param name="xxx" value="yyy"/>
  <param name="mmm" value="nnn"/>
</include>

现在我想创建模型应该像这样的 django 模型

class prof:
   xxx= models.CharField(verbose_name="XXX",max_length=45)
   mmm = models.CharField(verbose_name="YYY",max_length=100)

即模型字段的名称应该是 xml 文件中的参数名称,并且 xml 文件中的值应该插入到数据库中。如何才能做到这一点?

我已经做了类似的事情来从 xml 中获取参数名称,但我不知道如何从中创建模型字段名称。

 import os
 files = [file for file in os.listdir(os.path.join(path,'prof.xml')) if                    os.path.isfile(file)]
 for file in files:
    f = open((os.path.join(path,'prof.xml')),'r')
    for line in f.readlines():
        pos1 = line.find("param name")
        pos2 = line.find("value")
        if pos1>=0 and pos2>=0:
            field_name=line[pos1+12:pos2-2]
4

2 回答 2

2

我不确定你是否可以动态地做到这一点,因为在创建模型之后,你需要 syncdb 来创建适当的表等。

也许你可以稍微改变你的设计并拥有一个带有keyvalue字段的模型。

class DataContainer(models.Model):
   key = models.CharField(verbose_name="key",max_length=45)
   value = models.CharField(verbose_name="value",max_length=100)

并与您的模型有ManyToMany或有关系,例如:ForeignKey

class SomeModel(models.Model):
    data = models.ManyToManyField(DataContainer)
于 2013-02-28T06:55:18.990 回答
1

首先,您不应该手动解析 XML。这是灾难的秘诀。使用图书馆。

此外,我将支持 Rohan 关于不要尝试动态创建模型的建议,但这是可能的。我在库测试中这样做,如此处所示,但我从未尝试过它来制作永久表格。我还没有测试过这个,但这样的事情可能会奏效:

from django.core.management import call_command
from django.db import models

def create_new_model(name, fields):
    new_model = type(name, models.Model, fields)
    models.register_models('myapp', new_model)
    call_command('syncdb')

如果有人足够疯狂地尝试这个,请发表评论并让我知道它是如何进行的。

于 2013-02-28T07:45:44.147 回答