mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-04 20:40:14 +03:00
Fixes ordering bug with related fields in SearchFilter
This commit is contained in:
parent
0f61c9ec29
commit
f3f1d429c9
|
@ -174,8 +174,8 @@ class SearchFilter(BaseFilterBackend):
|
|||
"""
|
||||
Return True if 'distinct()' should be used to query the given lookups.
|
||||
"""
|
||||
opts = queryset.model._meta
|
||||
for search_field in search_fields:
|
||||
opts = queryset.model._meta
|
||||
if search_field[0] in self.lookup_prefixes:
|
||||
search_field = search_field[1:]
|
||||
parts = search_field.split(LOOKUP_SEP)
|
||||
|
|
|
@ -450,6 +450,39 @@ class SearchFilterTests(TestCase):
|
|||
reload_module(filters)
|
||||
|
||||
|
||||
class AttributeModelForeign(models.Model):
|
||||
label = models.CharField(max_length=32)
|
||||
|
||||
|
||||
class SearchFilterModelForeign(models.Model):
|
||||
title = models.CharField(max_length=20)
|
||||
text = models.CharField(max_length=100)
|
||||
attribute = models.ForeignKey(AttributeModelForeign)
|
||||
|
||||
|
||||
class SearchFilterForeignSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = SearchFilterModelForeign
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
class SearchFilterForeignTests(TestCase):
|
||||
def test_must_call_distinct(self):
|
||||
filter_ = filters.SearchFilter()
|
||||
prefixes = [''] + list(filter_.lookup_prefixes)
|
||||
for prefix in prefixes:
|
||||
self.assertFalse(
|
||||
filter_.must_call_distinct(
|
||||
SearchFilterModelForeign._meta, ["%sattribute__label" % prefix, "%stitle" % prefix]
|
||||
)
|
||||
)
|
||||
self.assertFalse(
|
||||
filter_.must_call_distinct(
|
||||
SearchFilterModelForeign._meta, ["%stitle" % prefix, "%sattribute__label" % prefix]
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class AttributeModel(models.Model):
|
||||
label = models.CharField(max_length=32)
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user