Django 模型管理器能否访问其模型;元属性(`Meta.unique_-together`)?

Django 模型管理器能否访问其模型;元属性(`Meta.unique_-together`)?,django,django-models,metaclass,natural-key,Django,Django Models,Metaclass,Natural Key,下面是我对广义自然密钥模型管理器的尝试。这与Meta.unique_together属性类似,只是它尝试(未成功)确定自然键字段名 class NaturalKeyModelManager(Manager): def get_by_natural_key(self, *args): field_dict = {} for i, k in enumerate(self.model.Meta.unique_together[0]):

下面是我对广义自然密钥模型管理器的尝试。这与Meta.unique_together属性类似,只是它尝试(未成功)确定自然键字段名

class NaturalKeyModelManager(Manager):

    def get_by_natural_key(self, *args):
        field_dict = {}
        for i, k in enumerate(self.model.Meta.unique_together[0]):
            field_dict[k] = args[i]
        return self.get(**field_dict)
如果在for循环之前插入调试打印,如下所示:

print dir(self.model.Meta)
它根本没有列出unqiue_together属性:

['__doc__', '__module__', 'abstract']
“抽象”有点让我担心,但另一个调试打印显示,我尝试使用自然键管理的模型不是抽象的:

>>> print self.model.Meta.abstract
False
我加入了很多抽象基类。这可能是问题所在吗

class MixedModel(NamedModel, TimeStampedModel, VersionedModel, Model):
    objects = NaturalKeyModelManager()

    class Meta:
        unique_together = (('name', 'version',),)
为了完整起见,这里有一个混音:

class TimeStampedModel(Model):
    created = DateTimeField(_("Created"),     auto_now_add=True, null=True, editable=False)
    updated = DateTimeField(_("Updated"),     auto_now=True,     null=True, editable=True)

    class Meta:
        abstract = True
硬编码模型管理器工作正常:

class MixedModelManager(Manager):
    def get_by_natural_key(self, name, version):
        return self.get(name=name, version=version)

为了获得传递给meta的实际选项,您应该使用
self.model.\u meta
而不是
self.model.meta