Skip to content

Commit 5ad0de6

Browse files
authored
Handle invalid AutoFilter field names (#345)
1 parent f067fd3 commit 5ad0de6

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

rest_framework_filters/filterset.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,11 @@ def get_fields(cls):
141141
for name, lookups in fields.items():
142142
if lookups == filters.ALL_LOOKUPS:
143143
field = get_model_field(cls._meta.model, name)
144-
fields[name] = utils.lookups_for_field(field)
144+
if field is not None:
145+
fields[name] = utils.lookups_for_field(field)
146+
else:
147+
# FilterSet will handle invalid name
148+
fields[name] = []
145149

146150
return fields
147151

tests/test_filterset.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import sys
2+
import unittest
23
import warnings
34

5+
import django_filters
46
from django.test import TestCase
57
from django_filters.filters import BaseInFilter
68
from rest_framework.test import APIRequestFactory
@@ -134,6 +136,28 @@ class Meta:
134136
'pk': filters.NumberFilter,
135137
})
136138

139+
@unittest.skipIf(django_filters.VERSION < (2, 2), 'requires django-filter 2.2')
140+
def test_autofilter_invalid_field(self):
141+
msg = "'Meta.fields' must not contain non-model field names: xyz"
142+
with self.assertRaisesMessage(TypeError, msg):
143+
class F(FilterSet):
144+
pk = filters.AutoFilter(field_name='xyz', lookups=['exact'])
145+
146+
class Meta:
147+
model = Note
148+
fields = []
149+
150+
@unittest.skipIf(django_filters.VERSION < (2, 2), 'requires django-filter 2.2')
151+
def test_all_lookups_invalid_field(self):
152+
msg = "'Meta.fields' must not contain non-model field names: xyz"
153+
with self.assertRaisesMessage(TypeError, msg):
154+
class F(FilterSet):
155+
class Meta:
156+
model = Note
157+
fields = {
158+
'xyz': '__all__',
159+
}
160+
137161
def test_relatedfilter_doesnt_expand_declared(self):
138162
# See: https://github.com/philipn/django-rest-framework-filters/issues/234
139163
class F(FilterSet):

0 commit comments

Comments
 (0)