2013-02-28 2 views
0

나는 다음과 같은 파일이 prof.xml이장고 모델은 동적으로

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

가 지금은 모델이 모델 즉,이

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

과 같아야 장고 모델을 만들려는 말을 한 모델 필드를 생성 필드에는 xml 파일의 param 이름 인 이름이 있어야하고 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] 

답변

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) 
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') 

경우, 의견을 나를 어떻게되는지 알려 주시기 바랍니다.

관련 문제