Dynamically identify fields in a peewee model

It works:

class MyModel(peewee.Model):
    my_field = peewee.IntegerField(null=False, default=0)

    class Meta(object):
        database = db
        db_table = 'MyTable'

This does not work:

class MyModel(peewee.Model):

    class Meta(object):
        database = db
        db_table = 'MyTable'

setattr(MyModel, 'my_field', peewee.IntegerField(null=False, default=0))

I guess this is due to some metaclass magic done in peewee.Model. Indeed, I do not see him in the model _meta.fields.

How could fields be dynamically determined?

+4
source share
1 answer

Instead of setattr, call add_to_class:

my_field = peewee.IntegerField(null=False, default=0)
my_field.add_to_class(MyModel, 'my_field_name')

# Now this works:
MyModel.my_field_name
+15
source

Source: https://habr.com/ru/post/1531385/


All Articles