diff --git a/pylint_django/tests/input/func_noerror_foreign_key_in_non_django_class.py b/pylint_django/tests/input/func_noerror_foreign_key_in_non_django_class.py new file mode 100644 index 00000000..53106301 --- /dev/null +++ b/pylint_django/tests/input/func_noerror_foreign_key_in_non_django_class.py @@ -0,0 +1,25 @@ +""" +Checks that Pylint raise 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. +""" +# pylint: disable=missing-docstring + +class ForeignKey: # pylint: disable=too-few-public-methods + def test_methond(self): + pass + + +class Resource: # pylint: disable=too-few-public-methods + def test_methond(self): + pass + + +class MyTestResource(Resource): # pylint: disable=too-few-public-methods + author = ForeignKey('myapp.api.resource', 'xxx') diff --git a/pylint_django/transforms/foreignkey.py b/pylint_django/transforms/foreignkey.py index d16b47c7..d0213879 100644 --- a/pylint_django/transforms/foreignkey.py +++ b/pylint_django/transforms/foreignkey.py @@ -16,6 +16,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, '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):