diff --git a/pylint_django/tests/input/external_tastypie_noerror_foreign_key.py b/pylint_django/tests/input/external_tastypie_noerror_foreign_key.py new file mode 100644 index 00000000..68413e9a --- /dev/null +++ b/pylint_django/tests/input/external_tastypie_noerror_foreign_key.py @@ -0,0 +1,21 @@ +""" +Checks that Pylint doesn't raise an error when a 'ForeignKey' appears in a +non-django class + +The real case is described as follow: +The project use tastypie and django. +tastypie has a `ForeignKey` field which has the same name +as django's `ForeignKey`. +The issue is the lint trys resolving the `ForeignKey` for the +tastypie `ForeignKey` which cause import error. +""" +from tastypie import fields +from tastypie.fields import ForeignKey + +# pylint: disable=missing-docstring +from tastypie.resources import ModelResource + + +class MyTestResource(ModelResource): # pylint: disable=too-few-public-methods + field1 = ForeignKey("myapp.api.resource", "xxx") + field2 = fields.ForeignKey("myapp.api.resource", "xxx") diff --git a/pylint_django/transforms/foreignkey.py b/pylint_django/transforms/foreignkey.py index 3f3307cd..fc5b1c6e 100644 --- a/pylint_django/transforms/foreignkey.py +++ b/pylint_django/transforms/foreignkey.py @@ -13,6 +13,11 @@ def is_foreignkey_in_class(node): if not isinstance(node.parent.parent, ClassDef): return False + # Make sure the outfit class is the subclass of django.db.models.Model + is_in_django_model_class = node_is_subclass(node.parent.parent, "django.db.models.base.Model", ".Model") + if not is_in_django_model_class: + return False + if isinstance(node.func, Attribute): attr = node.func.attrname elif isinstance(node.func, nodes.Name): diff --git a/setup.py b/setup.py index acc9b439..2f23b341 100644 --- a/setup.py +++ b/setup.py @@ -23,7 +23,7 @@ ], extras_require={ "with_django": ["Django"], - "for_tests": ["django_tables2", "factory-boy", "coverage", "pytest", "wheel"], + "for_tests": ["django_tables2", "factory-boy", "coverage", "pytest", "wheel", "django-tastypie"], }, license="GPLv2", classifiers=[