class UserSerializer(DynamicModelSerializer): class Meta: model = User name = 'user' name_field = 'name' fields = ( 'id', 'name', 'permissions', 'groups', 'location', 'last_name', 'display_name', 'thumbnail_url', 'number_of_cats', 'profile', 'date_of_birth', 'favorite_pet_id', 'favorite_pet', 'is_dead', ) deferred_fields = ( 'last_name', 'date_of_birth', 'display_name', 'profile', 'thumbnail_url', 'favorite_pet_id', 'favorite_pet', 'is_dead', ) read_only_fields = ('profile', ) location = DynamicRelationField('LocationSerializer') permissions = DynamicRelationField('PermissionSerializer', many=True, help_text='Permissions for this user', deferred=True) groups = DynamicRelationField('GroupSerializer', many=True, deferred=True) display_name = DynamicField(source='profile.display_name', read_only=True) thumbnail_url = DynamicField(source='profile.thumbnail_url', read_only=True) number_of_cats = DynamicMethodField(requires=['location.cat_set.*'], deferred=True) # Don't set read_only on this field directly. Used in test for # Meta.read_only_fields. profile = DynamicRelationField('ProfileSerializer', deferred=True) favorite_pet = DynamicGenericRelationField(required=False) def get_number_of_cats(self, user): location = user.location return len(location.cat_set.all()) if location else 0
def test_dgrf_with_requires_raises(self): with self.assertRaises(Exception): DynamicGenericRelationField(requires=['foo', 'bar'])