4 回答

TA贡献1815条经验 获得超6个赞
我想我解决了您的奥秘-您分配的类不是Field的实例。这样有帮助:
class Model(object):
__metaclass__ = ModelMetaClass
def __init__(self):
print "ROOT MODEL INIT", self._meta
print "-"*80
super(Model, self).__init__()
_metafields = self._meta.get('fields',[])
for _field in _metafields:
_f = _field['value']
if DELETE_CLASS_VAR and hasattr(self, _field['name']):
delattr(self.__class__, _field['name'])
setattr(self, _field['name'], \
_f.__new__(_f.__class__, *_f._args, **_f._kwargs))
仅在DELETE_CLASS_VAR启用时有效。
但是printin__set__()方法的结果迫使我的胆量向我发出信号,告诉我该解决方案仍然存在某些问题,才能进一步完善和实用。

TA贡献1839条经验 获得超15个赞
在尝试实现复杂目标时只能提供一些提示:
尝试创建自己的
Options
类-_meta
实际上是的一个实例django.db.models.options.Options
,其中的某些_meta
行为看起来似乎像列表等,但是您应该研究将Django的类子类化,并覆盖您必需的东西。猜猜您使用Django的模型元类是正确的方法,但是您还应该查看字段类内置了什么魔术,字段的
contribute_to_class
本质是非常重要的...还要尝试使用Django的
Field
类作为基类,因为可能会进行代码检查某个字段是否真的像这样……
好吧,这不是真正的答案,只是试图提供一些提示!
添加回答
举报