2013-02-28 197 views
0

我有以下文件說prof.xmlDjango模型:動態生成模型場

<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] 

回答

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) 

而且具有ManyToManyForeignKey與您的模型像關係:

class SomeModel(models.Model): 
    data = models.ManyToManyField(DataContainer) 
1

首先,你不應該用手解析你的XML。這是一場災難。使用圖書館。

此外,我要第二次羅漢的建議,不試圖動態地創建你的模型,但它是可能的。我在圖書館的測試中做到這一點,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') 

如果任何人的瘋狂足以試試這個,請評論,讓我知道如何去。