Access Django model's fields using a string instead of dot syntax?

前端 未结 4 1444
青春惊慌失措
青春惊慌失措 2020-12-13 05:49

In Django, I can do this:

test = Test.objects.get(id=1)
test.name

I want to be able to access the properties using dynamically generated st

相关标签:
4条回答
  • 2020-12-13 05:55

    You can use python's built in getattr() function:

    getattr(test, 'name')
    
    0 讨论(0)
  • 2020-12-13 05:58

    Other answers still stand, but now you can do this using Django's _meta.get_field().

    test._meta.get_field('name')
    

    Note that the Model _meta API has begun its official support and documentation as of 1.8, but has been distributed and used in prior versions before its official documentation.

    0 讨论(0)
  • 2020-12-13 06:16

    In Python, you can normally access values within an object that has a dict method.

    Let's say you have this class:

    class Dog(object):
        def __init___(self, color):
            self.color = color
    

    And then I instantiate it:

    dog = Dog('brown')
    

    So i can see the color by doing:

    print dog.color
    

    I can also see the color by doing:

    print dog.__dict__['color']
    

    I can set the color:

    print dog.__dict__['color'] = 'green'
    
    print dog.color
    
    >>>green
    
    0 讨论(0)
  • 2020-12-13 06:19

    Assuming name is an attribute on your instance test getattr(test, 'name') should return the corresponding value. Or test.__dict__['name'].

    You can read more about getattr() here: http://effbot.org/zone/python-getattr.htm

    0 讨论(0)
提交回复
热议问题