Search code examples
ormpeeweeflask-peewee

Peewee Meta class inherence


I am struggling with the following:

from my_db_definition import db
from peewee import *
class A(Model):
    class Meta:
        database=db
        table_name = 'random'
        
class B(A):
    pass

when running

print(A._meta.table_name)
print(B._meta.table_name)
random
b

My question is now, why is the table name changed in this case, and can this be prevented? I am completely confused


Solution

  • http://docs.peewee-orm.com/en/latest/peewee/models.html#model-options-and-table-metadata

    The docs list which options are inherited and which are not.

    Only certain attributes are passed to the subclass via the inner "Meta" class. It's purpose is 1) namespacing, and 2) provide conventions around DRY code.

    table name is not inherited because presumably you only want one class-per-table, whereas database is inherited because it makes sense to only declare that once.