我如何在django中使用元类中的类属性

时间:2012-11-09 03:09:46

标签: python django

我有这段代码

class DistrictResource(ModelResource):
    model=models.District
    res_name="district"
    class Meta:
        queryset = self.model.District.objects.active()

我如何在meta中使用self.model,因为如果我使用self

,我会收到错误

1 个答案:

答案 0 :(得分:3)

您需要使用

queryset = models.District.objects.active() 

而不是

queryset = self.model.District.objects.active()

在这种情况下。

编辑:

由于scope resolution in Python的规则,您无法访问内部类中的res_name

  

块是一段Python程序文本,作为一个单元执行。以下是块:模块,函数体和类定义。

     

范围定义块中名称的可见性。

     

类块中定义的名称范围仅限于类块;它没有扩展到方法的代码块 - 这包括生成器表达式,因为它们是使用函数作用域实现的。

记住Python Scope解析的一个简单规则是LEGB规则:

升。本地,即在函数中指定的名称。

电子。封闭功能本地人。

-G。全局

B中。内置插件。


当Django / Tastypie使用元类来构造类时,

class Meta被用作配置选项。我不确定您为什么要在Meta内访问Meta之外的变量,而不是在Meta内定义它。