1

私はしばらく 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
...

具体的には、最後の 2 行です。<model>.objects = Manager()適切なコード補完が表示されるようにKomodo に伝える方法はありますか?

4

1 に答える 1

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 はコード補完を完全に取得します。

うまくいけば、これは誰かを助けるでしょう:-)

于 2011-08-17T16:20:42.440 に答える