Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.0k views
in Technique[技术] by (71.8m points)

orm - 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

question from:https://stackoverflow.com/questions/65923090/peewee-meta-class-inherence

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...