Добавление дополнения кода менеджера моделей django в Komodo - PullRequest
1 голос
/ 17 августа 2011

Я уже некоторое время использую 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
...

В частности, последние две строки.Есть ли способ сообщить Комодо, что <model>.objects = Manager() показывает правильное завершение кода?

1 Ответ

0 голосов
/ 17 августа 2011

Вероятно, самый простой способ заставить это работать - добавить следующее в начало модели. 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 отлично подхватывает завершение кода.

Надеюсь, это кому-нибудь поможет: -)

...