From 1bd218ba52020a8be814d18f6c1ec04a84844c39 Mon Sep 17 00:00:00 2001 From: Rowan Seymour Date: Tue, 4 Oct 2016 10:08:46 +0200 Subject: [PATCH] Add ignore_case arg to UniqueValidator so that field uniqueness validation can be case insensitive --- rest_framework/validators.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/rest_framework/validators.py b/rest_framework/validators.py index ef23b9bd7..4e834c241 100644 --- a/rest_framework/validators.py +++ b/rest_framework/validators.py @@ -42,9 +42,10 @@ class UniqueValidator(object): """ message = _('This field must be unique.') - def __init__(self, queryset, message=None): + def __init__(self, queryset, ignore_case=True, message=None): self.queryset = queryset self.serializer_field = None + self.ignore_case = ignore_case self.message = message or self.message def set_context(self, serializer_field): @@ -62,7 +63,8 @@ class UniqueValidator(object): """ Filter the queryset to all instances matching the given attribute. """ - filter_kwargs = {self.field_name: value} + field_lookup = 'iexact' if self.ignore_case else 'exact' + filter_kwargs = {'%s__%s' % (self.field_name, field_lookup): value} return qs_filter(queryset, **filter_kwargs) def exclude_current_instance(self, queryset):