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 を使用して適切なテーブルなどを作成する必要があるため、動的に実行できるかどうかはわかりません。

key設計を少し変更して、とvalueフィールドを持つモデルを作成できるかもしれません。

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)
于 2013-02-28T06:55:18.990 に答える
1

まず第一に、XML を手動で解析するべきではありません。それは災害のレシピです。ライブラリを使用します。

また、モデルを動的に作成しようとしないという Rohan のアドバイスに同意しますが、それは可能です。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')

誰かがこれを試すほど夢中になっている場合は、コメントして、どうなるか教えてください.

于 2013-02-28T07:45:44.147 に答える