mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-11-04 09:57:55 +03:00 
			
		
		
		
	Don't cache _readable_fields and _writable_fields (#6689)
It might be useful for a serializer with many many fields which uses read_only and write_only on a large percentage of the fields. But the memory usage and statefulness it adds are not worth it for the common case.
This commit is contained in:
		
							parent
							
								
									1b8141a4aa
								
							
						
					
					
						commit
						ccd9b71c0a
					
				| 
						 | 
					@ -361,18 +361,17 @@ class Serializer(BaseSerializer, metaclass=SerializerMetaclass):
 | 
				
			||||||
            fields[key] = value
 | 
					            fields[key] = value
 | 
				
			||||||
        return fields
 | 
					        return fields
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @cached_property
 | 
					    @property
 | 
				
			||||||
    def _writable_fields(self):
 | 
					    def _writable_fields(self):
 | 
				
			||||||
        return [
 | 
					        for field in self.fields.values():
 | 
				
			||||||
            field for field in self.fields.values() if not field.read_only
 | 
					            if not field.read_only:
 | 
				
			||||||
        ]
 | 
					                yield field
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @cached_property
 | 
					    @property
 | 
				
			||||||
    def _readable_fields(self):
 | 
					    def _readable_fields(self):
 | 
				
			||||||
        return [
 | 
					        for field in self.fields.values():
 | 
				
			||||||
            field for field in self.fields.values()
 | 
					            if not field.write_only:
 | 
				
			||||||
            if not field.write_only
 | 
					                yield field
 | 
				
			||||||
        ]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_fields(self):
 | 
					    def get_fields(self):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -219,7 +219,7 @@ class TestReadOnly:
 | 
				
			||||||
        Read-only fields should not be writable, even with default ()
 | 
					        Read-only fields should not be writable, even with default ()
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        serializer = self.Serializer()
 | 
					        serializer = self.Serializer()
 | 
				
			||||||
        assert len(serializer._writable_fields) == 1
 | 
					        assert len(list(serializer._writable_fields)) == 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_validate_read_only(self):
 | 
					    def test_validate_read_only(self):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user