forked from VimPlug/jedi
Merge branch 'django-custom-object-manager' of https://github.com/PeterJCLaw/jedi into django
This commit is contained in:
@@ -110,15 +110,47 @@ def _create_manager_for(cls, manager_cls='BaseManager'):
|
|||||||
|
|
||||||
|
|
||||||
def _new_dict_filter(cls):
|
def _new_dict_filter(cls):
|
||||||
filters = cls.get_filters(is_instance=True, include_metaclasses=False)
|
def get_manager_name(filters):
|
||||||
|
for f in filters:
|
||||||
|
names = f.get('objects')
|
||||||
|
if not names:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Found a match. Either the model has a custom manager, or we're
|
||||||
|
# now in django.db.models.Model. If the latter we need to use
|
||||||
|
# `_create_manager_for` because the manager we get from the
|
||||||
|
# stubs doesn't work right.
|
||||||
|
|
||||||
|
name = names[0] # The first name should be good enough.
|
||||||
|
|
||||||
|
parent = name.get_defining_qualified_value()
|
||||||
|
if parent.py__name__() == 'Model':
|
||||||
|
|
||||||
|
django_models_model, = cls.inference_state.import_module(
|
||||||
|
('django', 'db', 'models', 'base'),
|
||||||
|
).py__getattribute__('Model')
|
||||||
|
if django_models_model == parent:
|
||||||
|
# Don't want to use the value from the Django stubs, but
|
||||||
|
# we have found the point where they'd take precedence.
|
||||||
|
break
|
||||||
|
|
||||||
|
return name
|
||||||
|
|
||||||
|
manager = _create_manager_for(cls)
|
||||||
|
if manager:
|
||||||
|
return manager.name
|
||||||
|
|
||||||
|
filters = list(cls.get_filters(is_instance=True, include_metaclasses=False))
|
||||||
dct = {
|
dct = {
|
||||||
name.string_name: DjangoModelName(cls, name)
|
name.string_name: DjangoModelName(cls, name)
|
||||||
for filter_ in reversed(list(filters))
|
for filter_ in reversed(filters)
|
||||||
for name in filter_.values()
|
for name in filter_.values()
|
||||||
}
|
}
|
||||||
manager = _create_manager_for(cls)
|
|
||||||
if manager:
|
manager_name = get_manager_name(filters)
|
||||||
dct['objects'] = manager.name
|
if manager_name:
|
||||||
|
dct['objects'] = manager_name
|
||||||
|
|
||||||
return DictFilter(dct)
|
return DictFilter(dct)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,18 @@ from django.db import models
|
|||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
|
|
||||||
|
class TagManager(models.Manager):
|
||||||
|
def specially_filtered_tags(self):
|
||||||
|
return self.all()
|
||||||
|
|
||||||
|
|
||||||
class Tag(models.Model):
|
class Tag(models.Model):
|
||||||
tag_name = models.CharField()
|
tag_name = models.CharField()
|
||||||
|
|
||||||
|
objects = TagManager()
|
||||||
|
|
||||||
|
custom_objects = TagManager()
|
||||||
|
|
||||||
|
|
||||||
class Category(models.Model):
|
class Category(models.Model):
|
||||||
category_name = models.CharField()
|
category_name = models.CharField()
|
||||||
@@ -49,6 +58,9 @@ class BusinessModel(models.Model):
|
|||||||
|
|
||||||
unidentifiable = NOT_FOUND
|
unidentifiable = NOT_FOUND
|
||||||
|
|
||||||
|
def method(self):
|
||||||
|
return 42
|
||||||
|
|
||||||
# -----------------
|
# -----------------
|
||||||
# Model attribute inference
|
# Model attribute inference
|
||||||
# -----------------
|
# -----------------
|
||||||
@@ -132,6 +144,11 @@ model_instance.unidentifiable
|
|||||||
#! ['unidentifiable = NOT_FOUND']
|
#! ['unidentifiable = NOT_FOUND']
|
||||||
model_instance.unidentifiable
|
model_instance.unidentifiable
|
||||||
|
|
||||||
|
#? int()
|
||||||
|
model_instance.method()
|
||||||
|
#! ['def method']
|
||||||
|
model_instance.method
|
||||||
|
|
||||||
# -----------------
|
# -----------------
|
||||||
# Queries
|
# Queries
|
||||||
# -----------------
|
# -----------------
|
||||||
@@ -147,6 +164,16 @@ model_instance.objects.update(x='')
|
|||||||
#? BusinessModel()
|
#? BusinessModel()
|
||||||
model_instance.objects.create()
|
model_instance.objects.create()
|
||||||
|
|
||||||
|
# -----------------
|
||||||
|
# Custom object manager
|
||||||
|
# -----------------
|
||||||
|
|
||||||
|
#? TagManager()
|
||||||
|
Tag.objects
|
||||||
|
|
||||||
|
#? TagManager()
|
||||||
|
Tag.custom_objects
|
||||||
|
|
||||||
# -----------------
|
# -----------------
|
||||||
# Inheritance
|
# Inheritance
|
||||||
# -----------------
|
# -----------------
|
||||||
|
|||||||
Reference in New Issue
Block a user