Using parameters to return table column values?


I want to be able to use a parameter to determine which columns value to return. But, since ‘owner’ is a model, the ‘assetType’ in ‘owner.assetType’ is treated as an attribute and not as the parameter.

This is just an example of the code I’m working on.

# Owner, by default, owns 1 home, 2 boats, and 3 cars
class Owner(BaseTable):
    homes = IntegerField(null=False, default = 1)
    boats = IntegerField(null=False, default = 2)
    cars = IntegerField(null=False, default = 3)

owner = Owner.get_by_id(1)

allAssets = {
    "House1": {
        "assetType": "homes"
    "Boat1": {
        "assetType": "boats"

# returns 'homes'
House1Type = allAssets["House1"].get("assetType")

# returns 1

# AttributeError: 'Owner' object has no attribute 'assetType'
def findValue(assetType):

# GOAL: return '1'

This code does the job and gives me the values I’m looking for, but is turning into a giant if else statement and I’m wondering if there is a more concise way to dynamically get these values.

# if house 1 is type 'boats', show value
# if house 1 is type 'homes', show value
if House1Type == "boats":
    print("Owned Boats: ",
elif House1Type == "homes":
    print("Owned Homes: ",
Asked By: schutta



We can optimize the solution by directly calling getattr

    print(f"Owned {House1Type.title()}: {getattr(owner, House1Type)}")

We can achieve GOAL by using same getattr

def findValue(assetType):
    return getattr(owner, str(assetType), None)

# GOAL: return '1'
val = findValue(House1Type)
print(f"Owned {House1Type}: {val}")
Answered By: Usman Arshad
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.