我有以下文件说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获取param名称,但我不知道如何创建模型字段名称。
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]
答案 0 :(得分:2)
我不确定你是否可以动态地执行此操作,因为在创建模型之后,您需要syncdb来创建适当的表等。
您可以稍微更改一下设计,并建立一个包含key
和value
字段的模型。
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)
答案 1 :(得分:1)
首先,您不应该手动解析XML。这是灾难的秘诀。使用图书馆。
此外,我将讨论Rohan的建议,不要试图动态创建模型,但这是可能的。我在测试库as seen here时这样做,但我从未尝试过制作永久表。我没有测试过这个,但这样的事情可能有用:
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')
如果有人疯狂地尝试这个,请发表评论并让我知道它是怎么回事。