python-coder
python-coder

Reputation: 2148

Dynamically access Django models fields python

I've a model Level

class Level:
   level1_id = models.IntegerField()
   level2_id = models.IntegerField()
   level3_id = models.IntegerField()
   level4_id = models.IntegerField()
   level5_id = models.IntegerField()
   level6_id = models.IntegerField()
   level7_id = models.IntegerField()
   level_name = models.CharField()

I'm passing and integer id in the range of 1-7 and a name from AJAX. Now I want to get the levelX_id with respective id and name, X being id(1-7).

This is how I'm doing.

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


if id == 1:
    level_name = Level.objects.all(level_name = name)[0].level1_id


if id == 2:
    level_name = Level.objects.all(level_name = name)[0].level2_id


if id == 3:
    level_name = Level.objects.all(level_name = name)[0].level3_id


if id == 4:
    level_name = Level.objects.all(level_name = name)[0].level4_id


if id == 5:
    level_name = Level.objects.all(level_name = name)[0].level5_id


if id == 6:
    level_name = Level.objects.all(level_name = name)[0].level6_id


if id == 7:
    level_name = Level.objects.all(level_name = name)[0].level7_id

Can I make it more generic. something like.

level_X_id = "level"+id+"_id"
level_name = Level.objects.all(level_name = name)[0].level_X_id

Upvotes: 1

Views: 63

Answers (1)

Paulo Bu
Paulo Bu

Reputation: 29794

I think getattr is what you want. You can do something like this:

level_X_id = "level"+id+"_id"
level_name = getattr(Level.objects.all(level_name = name)[0], level_X_id)

Hope this helps!

Upvotes: 1

Related Questions