2012-05-30 29 views
0

的定製經理我延長默認模型管理器和添加特定的緩存邏輯吧: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() 

我使用它在具體的模型:

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突出顯示它並寫入「未解析的屬性參考」警告。當我在TokenType.之後按CMD +空格時,我看到,自動填充框包含兩個對象項目:一個標有功能圖標並具有類型ReadOnlyManager,第二個 - 具有方法圖標並具有類型管理器。

它是PyCharm的bug嗎?如何在自定義管理器中爲其他方法啓用autocomlete?

+0

單獨從你的問題,我建議你在jetbrains上使用IssueTracker,他們真的快速拿起這些東西 –

+0

@ArgsKwargs,謝謝,張貼它。獲得答案時將更新此主題。 – Marboni

+0

@Marboni,JetBrains的任何迴應?剛發現這個問題煩人:) – Munhitsu

回答

1

這似乎是PyCharm的問題。爲Python編寫自動完成是一項艱鉅的任務,特別是對於使用Meta Classes和其他討厭東西的Django Models

但是有可能完成的,它似乎不是那麼困難,你比如我的自動完成(https://github.com/davidhalter/jedi/tree/dev,工作正在進行中,不要用它了)是能夠完成它:

完成TokenType.objects.

update     
by_id     
by_lookup    
create     
use_for_related_fields 

完成TokenType.

__metaclass__     
__hash__      
_get_next_or_previous_in_order 
__ne__       
date_error_message    
description     
_perform_date_checks   
delete       
clean       
objects      
unique_error_message   
_set_pk_val     
_deferred      
save_base      
pk        
serializable_value    
full_clean      
__init__      
code       
save       
__str__      
validate_unique    
clean_fields     
__repr__      
_perform_unique_checks   
__reduce__      
_get_unique_checks    
prepare_database_save   
_get_pk_val     
__eq__       
lookups      
_get_next_or_previous_by_FIELD 
Meta       
_get_FIELD_display  

就我而言,PyCharm是封閉源代碼,因此我認爲您必須與PyCharm開發人員進行交流。

+0

youtrack.jetbrains.com/issue/PY-6664,修正版本 - > 120.113 – Marboni