Skip to content

Related names are broken when using AllLookupsFilter #127

Closed
@JohnDoee

Description

@JohnDoee

models.py

from __future__ import unicode_literals

from django.db import models


class A(models.Model):
    name = models.CharField(max_length=50)

class B(models.Model):
    a = models.ForeignKey(A)

filters.py

import rest_framework_filters as filters

from .models import B

class BFilter(filters.FilterSet):
    name = filters.AllLookupsFilter(name='a__name')
    working_name = filters.CharFilter(name='a__name')

    class Meta:
        model = B

Error when BFilter.name is in the code

>>> from testapp.filters import *
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/tidalstream/testenv/testproj/testapp/filters.py", line 5, in <module>
    class BFilter(filters.FilterSet):
  File "/home/tidalstream/testenv/local/lib/python2.7/site-packages/rest_framework_filters/filterset.py", line 68, in __new__
    new_filters = new_class.filters_for_model(opts.model, opts)
  File "/home/tidalstream/testenv/local/lib/python2.7/site-packages/rest_framework_filters/filterset.py", line 142, in filters_for_model
    field = model._meta.get_field(name)
  File "/home/tidalstream/testenv/local/lib/python2.7/site-packages/django/db/models/options.py", line 619, in get_field
    raise FieldDoesNotExist('%s has no field named %r' % (self.object_name, field_name))
FieldDoesNotExist: B has no field named 'a__name'

There is no error BFilter.name is removed, i.e. BFilter.working_name does not have any problem with the related field.

pip freeze

Django==1.10.2
argparse==1.2.1
django-filter==0.15.3
djangorestframework==3.4.7
djangorestframework-filters==0.9.0
wsgiref==0.1.2

It seems like django_filters uses django_filters.utils.get_model_field to solve this issue,

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions