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
class CarSerializer(DynamicModelSerializer): country = DynamicRelationField('CountrySerializer') parts = DynamicRelationField('PartSerializer', many=True, source='part_set') # noqa country_name = DynamicField(source='country.name') country_short_name = DynamicField(source='country.short_name') class Meta: model = Car name_field = 'name' fields = ('id', 'name', 'country', 'parts', 'country_name', 'country_short_name') deferred_fields = ('name', 'country', 'parts', 'country_name', 'country_short_name')
class LocationSerializer(DynamicModelSerializer): class Meta: defer_many_relations = False model = Location name_field = 'name' name = 'location' fields = ('id', 'name', 'users', 'user_count', 'address', 'cats', 'friendly_cats', 'bad_cats', 'document') document = DynamicFileField(allow_null=False, deferred=True) users = DynamicRelationField('UserSerializer', source='user_set', many=True, deferred=True) user_count = CountField('users', required=False, deferred=True) address = DynamicField(source='blob', required=False, deferred=True) cats = DynamicRelationField('CatSerializer', source='cat_set', many=True, deferred=True) friendly_cats = DynamicRelationField('CatSerializer', many=True, deferred=True) bad_cats = DynamicRelationField('CatSerializer', source='annoying_cats', many=True, deferred=True)
class CountsSerializer(DynamicEphemeralSerializer): class Meta: name = 'counts' values = DynamicField(field_type=list) count = CountField('values', unique=False) unique_count = CountField('values')
class LocationGroupSerializer(DynamicEphemeralSerializer): class Meta: name = 'locationgroup' id = DynamicField(field_type=str) location = DynamicRelationField('LocationSerializer', deferred=False) groups = DynamicRelationField('GroupSerializer', many=True, deferred=False)
class LocationSerializer(DynamicModelSerializer): class Meta: defer_many_relations = False model = Location name = 'location' fields = ('id', 'name', 'users', 'user_count', 'address', 'cats', 'friendly_cats', 'bad_cats') users = DynamicRelationField('UserSerializer', source='user_set', many=True, deferred=True) user_count = CountField('users', required=False, deferred=True) address = DynamicField(source='blob', required=False, deferred=True) cats = DynamicRelationField('CatSerializer', source='cat_set', many=True, deferred=True) friendly_cats = DynamicRelationField('CatSerializer', many=True, deferred=True) bad_cats = DynamicRelationField('CatSerializer', source='annoying_cats', many=True, deferred=True) def filter_queryset(self, query): return query.exclude(name='Atlantis')
class ProfileSerializer(DynamicModelSerializer): class Meta: model = Profile name = 'profile' user = DynamicRelationField('UserSerializer') user_location_name = DynamicField(source='user.location.name', read_only=True)
class ProfileSerializer(DynamicModelSerializer): class Meta: model = Profile name = 'profile' fields = ( 'user', 'display_name', 'thumbnail_url', 'user_location_name', ) user = DynamicRelationField('UserSerializer') user_location_name = DynamicField(source='user.location.name', read_only=True)