2012-11-09 19 views
0

我有這樣的代碼如何使用元類的內部類屬性在Django

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

我怎樣才能在元使用self.model如果我使用自

+0

我會猜測:只是省略了自己...似乎無論如何都是類屬性。 –

+0

如果我這樣做,它說模型沒有定義,如果我在元類之前使用它,那麼它確定但不是內部元類 – user825904

回答

3

您需要使用

我得到錯誤
queryset = models.District.objects.active() 

,而不是

queryset = self.model.District.objects.active() 
在這種情況下爲

編輯:

不能訪問res_name內部類內部由於scope resolution in Python規則:

A嵌段是作爲一個單元執行的片Python程序文本。以下是塊:模塊,函數體和類定義。

作用域定義塊內名稱的可見性。

在類塊中定義的名稱範圍限於類塊;它不會擴展到方法的代碼塊 - 這包括生成器表達式,因爲它們是使用函數作用域實現的。

一個簡單的規則要記住Python的範圍分辨率是LEGB規則:

L.當地人,即函數中指定名稱。 E.包圍函數當地人。 B.內置插件。內嵌插件。當他們使用的元類來構造類


class Meta用於通過Django的/ Tastypie作爲配置選項。我不確定爲什麼你想從Meta以內訪問Meta以外的變量,而不是隻在Meta內部定義它。

+0

但爲什麼我可以訪問元類中上層類中定義的變量。有沒有辦法。 For.eg我可以訪問元類 – user825904

+0

@ user1787524裏的'res_name'我已經更新了答案,以解釋爲什麼你不能訪問'res_name'。 –

相關問題