Python Django如何访问抽象基模型局部变量

Python Django如何访问抽象基模型局部变量,python,django,abstract-class,Python,Django,Abstract Class,我已将此抽象基础模型定义如下: class ActivityAbstractBaseModel(models.Model): POOR = 'PR' FAIR = 'FA' MEDIOCRE = 'ME' GOOD_ENOUGH = 'GE' GOOD = 'GO' VERY_GOOD = 'VG' EXCELLENT = 'EX' STATE = [ (POOR, 'Poor'), (FAIR,

我已将此抽象基础模型定义如下:

class ActivityAbstractBaseModel(models.Model):
    POOR = 'PR'
    FAIR = 'FA'
    MEDIOCRE = 'ME'
    GOOD_ENOUGH = 'GE'
    GOOD = 'GO'
    VERY_GOOD = 'VG'
    EXCELLENT = 'EX'

    STATE = [
        (POOR, 'Poor'),
        (FAIR, 'Fair'),
        (MEDIOCRE,'Mediocre' ),
        (GOOD_ENOUGH, 'Good Enough' ),
        (GOOD, 'Good'),
        (VERY_GOOD, 'Very Good'),
        (EXCELLENT, 'Excellent'),
    ]

    speaking = models.CharField(max_length=50, choices=STATE, default=GOOD)
然后,我继承了这个抽象模型,如下所示,并添加了新字段
writing

class Fluency(ActivityAbstractBaseModel):
    writing = models.CharField(max_length=50, choices=STATE, default=GOOD)

现在,这个新字段
writing
正在尝试访问在抽象类中创建的变量
GOOD
STATE
,但是我遇到了
namererror
异常。有办法获取这些变量吗?

虽然您的类将继承这些类变量,但代码不能直接引用您定义类的位置(因为它们不在该范围内)。相反,您可以在类声明中将它们称为
ActivityAbstractBaseModel.GOOD
,等等

class Fluency(ActivityAbstractBaseModel):
    writing = models.CharField(max_length=50, choices=ActivityAbstractBaseModel.STATE, default=ActivityAbstractBaseModel.GOOD)

print(Fluency.GOOD) # This works properly

这很奇怪,因为我可以从抽象基础模型访问
speaking
,并使用
speaking=None
修改它,甚至删除它。是Django公开了字段而不是其他变量吗?@EyongKevinEnowanyo与Django无关。用普通的类试试看,这样不行。您可以设置
speaking
,但这只是您重新定义它,而不是引用它(您可能正在谈论在方法中引用它,该方法也适用于其他变量,例如
self。GOOD
在方法中可以正常工作)