Closed
Description
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
Labels
No labels