From 92623232c3a27d7ea1393a20d74110cfa15f335c Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Sat, 25 Apr 2020 21:52:47 +0200 Subject: [PATCH] Make sure Django User inference works --- jedi/inference/value/klass.py | 11 ++++++----- jedi/plugins/django.py | 3 ++- test/completion/django.py | 13 +++++++++---- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/jedi/inference/value/klass.py b/jedi/inference/value/klass.py index 55e38e56..89bc7925 100644 --- a/jedi/inference/value/klass.py +++ b/jedi/inference/value/klass.py @@ -186,11 +186,12 @@ class ClassMixin(object): mro.append(cls_new) yield cls_new - def get_filters(self, origin_scope=None, is_instance=False): - metaclasses = self.get_metaclasses() - if metaclasses: - for f in self.get_metaclass_filters(metaclasses): - yield f + def get_filters(self, origin_scope=None, is_instance=False, include_metaclasses=True): + if include_metaclasses: + metaclasses = self.get_metaclasses() + if metaclasses: + for f in self.get_metaclass_filters(metaclasses): + yield f for cls in self.py__mro__(): if cls.is_compiled(): diff --git a/jedi/plugins/django.py b/jedi/plugins/django.py index 0400c6a9..ab4c273a 100644 --- a/jedi/plugins/django.py +++ b/jedi/plugins/django.py @@ -107,9 +107,10 @@ def _create_manager_for(cls, manager_cls='BaseManager'): def _new_dict_filter(cls): - filter_ = ParserTreeFilter(parent_context=cls.as_context()) + filters = cls.get_filters(is_instance=True, include_metaclasses=False) dct = { name.string_name: DjangoModelName(cls, name) + for filter_ in filters for name in filter_.values() } manager = _create_manager_for(cls) diff --git a/test/completion/django.py b/test/completion/django.py index 64f5f6bb..8d8ca44b 100644 --- a/test/completion/django.py +++ b/test/completion/django.py @@ -5,10 +5,6 @@ from django.db import models from django.contrib.auth.models import User -#? str() -User().email - - class Tag(models.Model): tag_name = models.CharField() @@ -124,3 +120,12 @@ model_instance.objects.get().char_field model_instance.objects.update(x='') #? BusinessModel() model_instance.objects.create() + +# ----------------- +# Django Auth +# ----------------- + +#? str() +User().email +#? str() +User.objects.get().email