【发布时间】:2012-06-04 11:18:54
【问题描述】:
我扩展了默认模型管理器并向其添加了特定于缓存的逻辑:
class ReadOnlyManager(manager.Manager):
use_for_related_fields = True
def create(self, **kwargs):
obj = super(ReadOnlyManager, self).create(**kwargs)
cache.cache_read_only_object(obj)
...
return obj
def update(self, *args, **kwargs):
raise ReadOnlyException()
def by_id(self, object_id):
return cache.retrieve_read_only_object(self.model, object_id)
def by_lookup(self, lookup_key, lookup_value):
return cache.retrieve_read_only_object_by_lookup(self.model, lookup_key, lookup_value)
然后我创建了使用它的抽象模型:
class ReadOnlyModel(models.Model):
class Meta:
abstract = True
objects = ReadOnlyManager()
我在具体模型中使用它:
class TokenType(ReadOnlyModel):
code = models.CharField(_('code'), max_length=30, unique=True)
description = models.CharField(_('description'), max_length=100)
lookups = {
'code': 'code'
}
当我尝试调用特定于自定义缓存的方法时,例如 *by_id*:
TokenType.objects.by_id(1) # This code works
PyCharm 突出显示它并写入“未解析的属性引用”警告。当我在TokenType. 之后按 CMD+Space 时,我看到,该自动完成框包含两个 对象 项:一个标有功能图标,类型为 ReadOnlyManager,第二个 - 带有方法图标,类型为 Manager。
是 PyCharm 的错误吗?如何在自定义管理器中启用其他方法的自动完成?
【问题讨论】:
-
与你的问题分开,我建议你在jetbrains上使用IssueTracker,他们真的很快就能找到这些东西
-
@ArgsKwargs,谢谢,已发布。得到答案后将更新此主题。
-
@Marboni,JetBrains 有什么回应吗?刚发现这个问题很烦人:)
-
@Munhitsu,PyCharm 支持人员回答说他们计划在 1.6 中修复它:youtrack.jetbrains.com/issue/PY-6664。在票证中,我看到“已修复 -> 120.113”。
标签: python django autocomplete pycharm django-managers