我一直在使用ActiveState Komodo一段时间,虽然大部分代码完成都在其上,但它缺少Django模型管理器的代码完成。
我已将Django目录包含在我的PYTHONPATH
中并获得大部分代码完成,但值得注意的例外是模型。
假设我有一个模型users
,我希望代码users.objects.
能够显示自动填充选项,例如all()
,count()
,filter()
等等。由模型的管理者添加,这看起来是一种看似异常的方式。
我想知道我是否可以“迫使”Komodo拿起模特。
模型管理器看起来包含在以下代码中(取自manager.py)
def ensure_default_manager(sender, **kwargs):
"""
Ensures that a Model subclass contains a default manager and sets the
_default_manager attribute on the class. Also sets up the _base_manager
points to a plain Manager instance (which could be the same as
_default_manager if it's not a subclass of Manager).
"""
cls = sender
if cls._meta.abstract:
return
if not getattr(cls, '_default_manager', None):
# Create the default manager, if needed.
try:
cls._meta.get_field('objects')
raise ValueError("Model %s must specify a custom Manager, because it has a field named 'objects'" % cls.__name__)
except FieldDoesNotExist:
pass
cls.add_to_class('objects', Manager())
cls._base_manager = cls.objects
...
具体是最后两行。有没有办法告诉Komodo <model>.objects = Manager()
所以显示正确的代码完成?
答案 0 :(得分:0)
使这个工作最简单的方法似乎是将以下内容添加到models.py的顶部:
from django.db.models import manager
然后在每个模型下添加
objects = manager.Manager()
以便,例如,以下内容:
class Site(models.Model):
name = models.CharField(max_length=200)
prefix = models.CharField(max_length=1)
secret = models.CharField(max_length=255)
def __unicode__(self):
return self.name
变为
class Site(models.Model):
name = models.CharField(max_length=200)
prefix = models.CharField(max_length=1)
secret = models.CharField(max_length=255)
objects = manager.Manager()
def __unicode__(self):
return self.name
这是你(明确地)设置自己的模型管理器的方法,并通过显式设置模型管理器(默认)Kommodo完美地获取代码完成。
希望这会对某人有所帮助: - )