2012-11-07 87 views
2

我试图建立一种“迷你Django模型”,用于使用Django和MongoDB而不使用norel Django的dist(我不需要ORM访问这些...)。Python - 在调用类方法时从父类访问子类的变量

所以,我想要做的是模仿非标准行为或Django的默认模式“实现” ......这就是我这么远:

文件“models.py” (基体)

from django.conf import settings 
import pymongo 

class Model(object): 
    @classmethod 
    def db(cls): 
     db = pymongo.Connection(settings.MONGODB_CONF['host'], settings.MONGODB_CONF['port']) 

    @classmethod 
    class objects(object): 
     @classmethod 
     def all(cls): 
      db = Model.db() #Not using yet... not even sure if that's the best way to do it 
      print Model.collection 

文件 “mongomodels.py”(执行)

from mongodb import models 

class ModelTest1(models.Model): 
    database = 'mymongodb' 
    collection = 'mymongocollection1' 

class ModelTest2(models.Model): 
    database = 'mymongodb' 
    collection = 'mymongocollection2' 

文件 “views.py”(视图)

from mongomodels import ModelTest1, ModelTest2 

print ModelTest1.objects.all() #Should print 'mymongocollection1' 
print ModelTest2.objects.all() #Should print 'mymongocollection2' 

问题是,它不是从ModelTest1访问变量,而是从原始模型访问变量......出了什么问题?

回答

0

您必须给objects某种类型的链接到包含它的类。目前,您只需对它进行硬编码即可使用Model()的属性。因为您没有实例化这些类,所以您将不得不使用装饰器或元类在Model()的每个子类中为您创建object类。

+0

其实我到目前为止基本上都是试错的结果,所以我对“修饰器”和“元类”不是很熟悉......他们怎么会帮助我呢?我现在正在研究他们...... XD –