def test_unknown_resource(self): """Test case where polymorhpic relation pulls in an object for which there is no known canonical serializer. """ zork = Zebra.objects.create( name='Zork', origin='San Francisco Zoo' ) user = self.fixture.users[0] user.favorite_pet = zork user.save() self.assertIsNone(DynamicRouter.get_canonical_serializer(Zebra)) url = '/users/%s/?include[]=favorite_pet' % user.pk response = self.client.get(url) self.assertEqual(200, response.status_code) content = json.loads(response.content.decode('utf-8')) self.assertTrue('user' in content) self.assertFalse('zebras' in content) # Not sideloaded user_obj = content['user'] self.assertTrue('favorite_pet' in user_obj) self.assertEqual('Zebra', user_obj['favorite_pet']['type']) self.assertEqual(zork.pk, user_obj['favorite_pet']['id'])
def test_get_canonical_serializer_by_instance(self): dog = Dog.objects.create( name='Snoopy', fur_color='black and white', origin='' ) self.assertEqual( DogSerializer, DynamicRouter.get_canonical_serializer(None, instance=dog) )
def to_internal_value(self, data): model_name = data.get('type', None) model_id = data.get('id', None) if model_name and model_id: serializer_class = DynamicRouter.get_canonical_serializer( resource_key=None, resource_name=model_name) if serializer_class: model = serializer_class.get_model() return model.objects.get(id=model_id) if model else None return None
def get_serializer_class_for_instance(self, instance): return DynamicRouter.get_canonical_serializer(resource_key=None, instance=instance)
def test_get_canonical_serializer_by_model(self): self.assertEqual( DogSerializer, DynamicRouter.get_canonical_serializer(None, model=Dog) )
def test_get_canonical_serializer(self): rsrc_key = get_model_table(Dog) self.assertEqual( DogSerializer, DynamicRouter.get_canonical_serializer(rsrc_key) )