1

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

1 Answer 1

1

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!

Sign up to request clarification or add additional context in comments.

2 Comments

I tried to accept it, but as per SO's logic, I've to wait for 7-8 mins. Kindly wait. Thanks
Lol, nice piece of bureaucracy :) Ok, glad I could help anyways :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.