예제 #1
0
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
예제 #2
0
 def test_dgrf_with_requires_raises(self):
     with self.assertRaises(Exception):
         DynamicGenericRelationField(requires=['foo', 'bar'])