@@ -41,7 +41,6 @@ class UniqueValidator:
41
41
42
42
def __init__ (self , queryset , message = None , lookup = 'exact' ):
43
43
self .queryset = queryset
44
- self .serializer_field = None
45
44
self .message = message or self .message
46
45
self .lookup = lookup
47
46
@@ -94,15 +93,14 @@ class UniqueTogetherValidator:
94
93
def __init__ (self , queryset , fields , message = None ):
95
94
self .queryset = queryset
96
95
self .fields = fields
97
- self .serializer_field = None
98
96
self .message = message or self .message
99
97
100
- def enforce_required_fields (self , attrs , instance ):
98
+ def enforce_required_fields (self , attrs , serializer ):
101
99
"""
102
100
The `UniqueTogetherValidator` always forces an implied 'required'
103
101
state on the fields it applies to.
104
102
"""
105
- if instance is not None :
103
+ if serializer . instance is not None :
106
104
return
107
105
108
106
missing_items = {
@@ -113,16 +111,16 @@ def enforce_required_fields(self, attrs, instance):
113
111
if missing_items :
114
112
raise ValidationError (missing_items , code = 'required' )
115
113
116
- def filter_queryset (self , attrs , queryset , instance ):
114
+ def filter_queryset (self , attrs , queryset , serializer ):
117
115
"""
118
116
Filter the queryset to all instances matching the given attributes.
119
117
"""
120
118
# If this is an update, then any unprovided field should
121
119
# have it's value set based on the existing instance attribute.
122
- if instance is not None :
120
+ if serializer . instance is not None :
123
121
for field_name in self .fields :
124
122
if field_name not in attrs :
125
- attrs [field_name ] = getattr (instance , field_name )
123
+ attrs [field_name ] = getattr (serializer . instance , field_name )
126
124
127
125
# Determine the filter keyword arguments and filter the queryset.
128
126
filter_kwargs = {
@@ -141,13 +139,10 @@ def exclude_current_instance(self, attrs, queryset, instance):
141
139
return queryset
142
140
143
141
def __call__ (self , attrs , serializer ):
144
- # Determine the existing instance, if this is an update operation.
145
- instance = getattr (serializer , 'instance' , None )
146
-
147
- self .enforce_required_fields (attrs , instance )
142
+ self .enforce_required_fields (attrs , serializer )
148
143
queryset = self .queryset
149
- queryset = self .filter_queryset (attrs , queryset , instance )
150
- queryset = self .exclude_current_instance (attrs , queryset , instance )
144
+ queryset = self .filter_queryset (attrs , queryset , serializer )
145
+ queryset = self .exclude_current_instance (attrs , queryset , serializer . instance )
151
146
152
147
# Ignore validation if any field is None
153
148
checked_values = [
@@ -207,13 +202,11 @@ def __call__(self, attrs, serializer):
207
202
# same as the serializer field names if `source=<>` is set.
208
203
field_name = serializer .fields [self .field ].source_attrs [- 1 ]
209
204
date_field_name = serializer .fields [self .date_field ].source_attrs [- 1 ]
210
- # Determine the existing instance, if this is an update operation.
211
- instance = getattr (serializer , 'instance' , None )
212
205
213
206
self .enforce_required_fields (attrs )
214
207
queryset = self .queryset
215
208
queryset = self .filter_queryset (attrs , queryset , field_name , date_field_name )
216
- queryset = self .exclude_current_instance (attrs , queryset , instance )
209
+ queryset = self .exclude_current_instance (attrs , queryset , serializer . instance )
217
210
if qs_exists (queryset ):
218
211
message = self .message .format (date_field = self .date_field )
219
212
raise ValidationError ({
0 commit comments