mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-10-30 23:47:53 +03:00 
			
		
		
		
	Fix UniqueTogetherValidator to handle fields w/ source attr (#9688)
				
					
				
			* Add failing test for `UniqueConstraint` validation with `source` attribute * Fix `UniqueTogetherValidator` to handle fields with source attribute * split inner sources logic out to tuple comprehension
This commit is contained in:
		
							parent
							
								
									07d3e1ec8f
								
							
						
					
					
						commit
						543996711d
					
				|  | @ -188,7 +188,8 @@ class UniqueTogetherValidator: | |||
|                 if attrs[field_name] != getattr(serializer.instance, field_name) | ||||
|             ] | ||||
| 
 | ||||
|         condition_kwargs = {source: attrs[source] for source in self.condition_fields} | ||||
|         condition_sources = (serializer.fields[field_name].source for field_name in self.condition_fields) | ||||
|         condition_kwargs = {source: attrs[source] for source in condition_sources} | ||||
|         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) | ||||
|  |  | |||
|  | @ -683,6 +683,24 @@ class TestUniqueConstraintValidation(TestCase): | |||
|         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` | ||||
| # ---------------------------------- | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user