0

文字列を変数として変更したい。Djangoには7つのモデルがあります。

class Level1:
   level1_id = models.IntegerField()
   level1_name = models.CharField()

class Level2:
   level2_id = models.IntegerField()
   level2_name = models.CharField()

class Level3:
   level3_id = models.IntegerField()
   level3_name = models.CharField()

class Level4:
   level4_id = models.IntegerField()
   level4_name = models.CharField()

class Level5:
   level5_id = models.IntegerField()
   level5_name = models.CharField()

class Level6:
   level6_id = models.IntegerField()
   level6_name = models.CharField()

class Level7:
   level7_id = models.IntegerField()
   level1_name = models.CharField()

AJAX リクエストを介して、1 ~ 7 の範囲の整数「level_id」と「name」を渡しています。今私のviews.pyにあります。

level_id = request.POST['level_id']
name = request.POST['name']

if level_id == 1:
    level_name = Level1.objects.all(level1_name = name)


if level_id == 2:
    level_name = Level2.objects.all(level2_name = name)


if level_id == 3:
    level_name = Level3.objects.all(level3_name = name)


if level_id == 4:
    level_name = Level4.objects.all(level4_name = name)


if level_id == 5:
    level_name = Level5.objects.all(level5_name = name)


if level_id == 6:
    level_name = Level6.objects.all(level6_name = name)


if level_id == 7:
    level_name = Level7.objects.all(level7_name = name)

すべてを削減しif'sて、より一般的なものにすることはできますか。何かのようなもの

dict = {"1":"Level1","2":"Level2","3":"Level3","4":"Level4","5":"Level5","6":"Level6","7":"Level7"}

level_name = dict[level_id].objects.all( dict[level_id]+"id" = name)
4

1 に答える 1

2

ここでdjangoget_modelを有利に使用できます:

from django.db.models.loading import get_model

level_id = request.POST['level_id']
name = request.POST['name']
model = get_model('app_name', 'Level%s' % level_id) #replace app_name with the app this model resides in.

params = {"level%s_name" % level_id: name}
level_name = model.objects.filter(**params)

なぜあなたが持っているのかわかりません

class Level1():
    level1_name = CharField()

あなたはそれを作ることができます

class Level1():
    level_name = CharField()

そうすれば、それがどのレベルを指しているかがわかります。

さらに良い

class Level()
    level_name = CharField()
    level_id = IntegerField()

Level1、、を取り除きLevel2ます...これはより拡張可能です

于 2013-11-03T17:53:43.283 に答える