2011-08-17 9 views
1

私はActiveState Komodoをしばらく使用していますが、コード補完の大半はDjangoのモデルマネージャからのコード補完が欠けています。djangoモデルマネージャのコード補完をKomodoに追加

私はPYTHONPATHにDjangoディレクトリを含めて、コード補完の大半を得ました。例外はモデルです。

私はコードusers.objects.しかし、これらは一見異常な方法でそれを行うモデルの管理者によって追加されるなどall()count()filter()としてオートコンプリートオプションを表示するために期待usersモデルを持っていると仮定すると。

私はコモドがモデルを拾うのを強制することができるのだろうかと思っています。

モデルマネージャが(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 
... 

具体的に最後の2行から含まれるように見えます。コモドに<model>.objects = Manager()という正しいコード補完が表示されていると伝える方法はありますか?

答えて

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 

これは、あなた自身のモデルマネージャを設定する方法であり、モデルマネージャを明示的に(既定値に)設定することで、コードコンプリートが完全にピックアップされます。

うまくいけば、これは、これを行うのいずれかのより良い方法がある場合は、誰か:-)

+0

は(例えば上記自動魔法のようにやったように)私に知らせてくださいするのに役立ちます – syserr0r

関連する問題