mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-30 18:09:59 +03:00
Allow UniqueForXValidators to use instance data
This commit is contained in:
parent
40a184c544
commit
8547dbcbc5
|
@ -215,6 +215,17 @@ class BaseUniqueForValidator(object):
|
||||||
if missing_items:
|
if missing_items:
|
||||||
raise ValidationError(missing_items, code='required')
|
raise ValidationError(missing_items, code='required')
|
||||||
|
|
||||||
|
def _get_field_values(self, attrs):
|
||||||
|
"""Returns tuple (value, date_value) from attrs or instance"""
|
||||||
|
value = attrs.get(self.field)
|
||||||
|
date_value = attrs.get(self.date_field)
|
||||||
|
if hasattr(self, "instance") and self.instance is not None:
|
||||||
|
if value is None:
|
||||||
|
value = getattr(self.instance, self.field)
|
||||||
|
if date_value is None:
|
||||||
|
date_value = getattr(self.instance, self.date_field)
|
||||||
|
return (value, date_value)
|
||||||
|
|
||||||
def filter_queryset(self, attrs, queryset):
|
def filter_queryset(self, attrs, queryset):
|
||||||
raise NotImplementedError('`filter_queryset` must be implemented.')
|
raise NotImplementedError('`filter_queryset` must be implemented.')
|
||||||
|
|
||||||
|
@ -251,8 +262,7 @@ class UniqueForDateValidator(BaseUniqueForValidator):
|
||||||
message = _('This field must be unique for the "{date_field}" date.')
|
message = _('This field must be unique for the "{date_field}" date.')
|
||||||
|
|
||||||
def filter_queryset(self, attrs, queryset):
|
def filter_queryset(self, attrs, queryset):
|
||||||
value = attrs[self.field]
|
value, date = self._get_field_values(attrs)
|
||||||
date = attrs[self.date_field]
|
|
||||||
|
|
||||||
filter_kwargs = {}
|
filter_kwargs = {}
|
||||||
filter_kwargs[self.field_name] = value
|
filter_kwargs[self.field_name] = value
|
||||||
|
@ -266,8 +276,7 @@ class UniqueForMonthValidator(BaseUniqueForValidator):
|
||||||
message = _('This field must be unique for the "{date_field}" month.')
|
message = _('This field must be unique for the "{date_field}" month.')
|
||||||
|
|
||||||
def filter_queryset(self, attrs, queryset):
|
def filter_queryset(self, attrs, queryset):
|
||||||
value = attrs[self.field]
|
value, date = self._get_field_values(attrs)
|
||||||
date = attrs[self.date_field]
|
|
||||||
|
|
||||||
filter_kwargs = {}
|
filter_kwargs = {}
|
||||||
filter_kwargs[self.field_name] = value
|
filter_kwargs[self.field_name] = value
|
||||||
|
@ -279,8 +288,7 @@ class UniqueForYearValidator(BaseUniqueForValidator):
|
||||||
message = _('This field must be unique for the "{date_field}" year.')
|
message = _('This field must be unique for the "{date_field}" year.')
|
||||||
|
|
||||||
def filter_queryset(self, attrs, queryset):
|
def filter_queryset(self, attrs, queryset):
|
||||||
value = attrs[self.field]
|
value, date = self._get_field_values(attrs)
|
||||||
date = attrs[self.date_field]
|
|
||||||
|
|
||||||
filter_kwargs = {}
|
filter_kwargs = {}
|
||||||
filter_kwargs[self.field_name] = value
|
filter_kwargs[self.field_name] = value
|
||||||
|
|
Loading…
Reference in New Issue
Block a user