Выражаю менеджер модели по умолчанию и добавить логику кэш-специфичные для него:PyCharm не понимает пользовательский менеджер модели
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()
I использовать его в конкретной модели:
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 выделяет его и записывает предупреждение «Неразрешенный атрибут». Когда я нажимаю CMD + Space после TokenType.
, я вижу, что в поле автозаполнения содержатся два объекта : элементов: один помечается значком функции и имеет тип ReadOnlyManager, второй - с значком метода и имеет тип Manager.
Это ошибка PyCharm? Как включить автозапуск для дополнительных методов в пользовательском менеджере?
отдельно от вашей проблемы, я рекомендую вам использовать IssueTracker на jetbrains, они действительно быстро подбирают эти вещи –
@ArgsKwargs, спасибо, разместил его. Обновите эту тему, когда получите ответ. – Marboni
@Marboni, любой ответ от JetBrains? Просто нашел эту проблему раздражающей :) – Munhitsu