在django1.5中如何重写模型的元类?我在一些继承自抽象模型的模型上重写元类,以便设置适当的选择。e、 g
class BaseModel(models.Model):
field_with_choices = models.CharField(max_length=100)
class Meta:
abstract = True
class MyModelMetaClass(BaseModel.__metaclass__):
def __new__(cls, *args, **kwargs):
new_class = super(MyModelMetaClass, cls).__new__(cls, *args, **kwargs)
field = new_class._meta.get_field('field_with_choices')
choices = field._choices = []
choices.extend(get_choices())
return new_class
class MyModel(BaseModel):
__metaclass__ = MyModelMetaClass
但是,当我升级到Django 1.5时,我现在得到了一个错误:
^{pr2}$如何在1.5中重写模型的元类,或者在模型子类中动态地设置字段属性?在
如果我理解正确的话,django1.5使用six进行兼容性管理。根据docs,正确的方法如下:
您可以使用
built-in
函数type
,如下所示:虽然我看到}所以
type(ModelBase) is type
所以你基本上可以从type
或者可能从Model.__metaclass__
继承,这反过来又是{ModelBase
是模型元类架构的顶部(当然在type
之前:D)。在希望有帮助!在
相关问题 更多 >
编程相关推荐