Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion rest_framework/validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,10 @@ def __call__(self, attrs, serializer):
if attrs[field_name] != getattr(serializer.instance, field_name)
]

condition_kwargs = {source: attrs[source] for source in self.condition_fields}
condition_kwargs = {
serializer.fields[field_name].source: attrs[serializer.fields[field_name].source]
for field_name in self.condition_fields
}
if checked_values and None not in checked_values and qs_exists_with_condition(queryset, self.condition, condition_kwargs):
field_names = ', '.join(self.fields)
message = self.message.format(field_names=field_names)
Expand Down
18 changes: 18 additions & 0 deletions tests/test_validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -683,6 +683,24 @@ def test_nullable_unique_constraint_fields_are_not_required(self):
result = serializer.save()
self.assertIsInstance(result, UniqueConstraintNullableModel)

def test_unique_constraint_source(self):
class SourceUniqueConstraintSerializer(serializers.ModelSerializer):
raceName = serializers.CharField(source="race_name")

class Meta:
model = UniqueConstraintModel
fields = ("raceName", "position", "global_id", "fancy_conditions")

serializer = SourceUniqueConstraintSerializer(
data={
"raceName": "example",
"position": 5,
"global_id": 11,
"fancy_conditions": 11,
}
)
assert serializer.is_valid()


# Tests for `UniqueForDateValidator`
# ----------------------------------
Expand Down
Loading