def test_compactCRUDMixin(self):
        """
        Test CompactCRUD Mixin view with composite keys
        """
        client = self.app.test_client()
        self.browser_login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
        rv = client.get("/model1compactview/list/")
        self.assertEqual(rv.status_code, 200)

        # test with composite pk
        try:
            from urllib import quote
        except Exception:
            from urllib.parse import quote

        pk = '[3, {"_type": "datetime", "value": "2017-03-03T00:00:00"}]'
        with model3_data(self.appbuilder.session):
            rv = client.post(
                "/model3compactview/edit/" + quote(pk),
                data=dict(field_string="bar"),
                follow_redirects=True,
            )
            self.assertEqual(rv.status_code, 200)
            model = self.db.session.query(Model3).first()
            self.assertEqual(model.field_string, "bar")

            rv = client.get(
                "/model3compactview/delete/" + quote(pk), follow_redirects=True
            )
            self.assertEqual(rv.status_code, 200)
            model = self.db.session.query(Model3).first()
            self.assertEqual(model, None)

        Test CompactCRUD Mixin view with composite keys
        
tests/test_mvc.py