def _collect_editable_booleans(self):
        """
        Collect all fields marked as editable booleans. We do not
        want the user to be able to edit arbitrary fields by crafting
        an AJAX request by hand.
        """
        if hasattr(self, "_ajax_editable_booleans"):
            return

        self._ajax_editable_booleans = {}

        for field in self.list_display:
            # The ajax_editable_boolean return value has to be assigned
            # to the ModelAdmin class
            try:
                item = getattr(self.__class__, field)
            except (AttributeError, TypeError):
                continue

            attr = getattr(item, "editable_boolean_field", None)
            if attr:
                if hasattr(item, "editable_boolean_result"):
                    result_func = item.editable_boolean_result
                else:

                    def _fn(attr):
                        return lambda self, instance: [
                            ajax_editable_boolean_cell(instance, attr)
                        ]

                    result_func = _fn(attr)
                self._ajax_editable_booleans[attr] = result_func

        Collect all fields marked as editable booleans. We do not
        want the user to be able to edit arbitrary fields by crafting
        an AJAX request by hand.
        
feincms/admin/tree_editor.py