我有這樣的代碼如何使用元類的內部類屬性在Django
class DistrictResource(ModelResource):
model=models.District
res_name="district"
class Meta:
queryset = self.model.District.objects.active()
我怎樣才能在元使用self.model
如果我使用自
我有這樣的代碼如何使用元類的內部類屬性在Django
class DistrictResource(ModelResource):
model=models.District
res_name="district"
class Meta:
queryset = self.model.District.objects.active()
我怎樣才能在元使用self.model
如果我使用自
您需要使用
我得到錯誤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
內部定義它。
但爲什麼我可以訪問元類中上層類中定義的變量。有沒有辦法。 For.eg我可以訪問元類 – user825904
@ user1787524裏的'res_name'我已經更新了答案,以解釋爲什麼你不能訪問'res_name'。 –
我會猜測:只是省略了自己...似乎無論如何都是類屬性。 –
如果我這樣做,它說模型沒有定義,如果我在元類之前使用它,那麼它確定但不是內部元類 – user825904