I have a class defined inside another class like this. Basically I am trying to override the save
method in db.Model--it actually just the django.db.models.Model
. But when I run this block of code, I see the an NameError
.
class GameCenterDB:
class GameCenterDBConfig:
class Config:
db_for_read = "game_center_db.slave"
db_for_write = "default"
class PublisherTab(GameCenterDBConfig, db.Model):
publisher_id = db.PositiveIntegerField(primary_key=True)
name = db.CharField(max_length=100)
create_time = db.PositiveIntegerField()
update_time = db.PositiveIntegerField()
class Meta:
db_table = u'publisher_tab'
def save(self, *args, **kwargs):
curr_time = int(time.time())
if not self.create_time:
self.create_time = curr_time
self.update_time = curr_time
# See the line below, this triggers an error
# NameError: global name 'PublisherTab' is not defined
super(PublisherTab, self).save(*args, **kwargs)
According to my understanding, when it is inside GameCenterDB, I should be able to use PublisherTab directly right?
NameError: global name 'PublisherTab' is not defined
Change save
method like this will solve the error. But I just do not understand why.
def save(self, *args, **kwargs):
curr_time = int(time.time())
if not self.create_time:
self.create_time = curr_time
self.update_time = curr_time
super(GameCenterDB.PublisherTab, self).save(*args, **kwargs)
Also, seems that class PublisherTab(GameCenterDBConfig, db.Model):
is interpreted without any error and the mixin worked. Why GameCenterDBConfig
can be used without any problem?