def register(self, *args, **kwargs): """ Register a crud. Two unordered arguments are accepted, at least one should be passed: - a model, - a crudbuilder class """ assert len(args) <= 2, 'register takes at most 2 args' assert len(args) > 0, 'register takes at least 1 arg' model, crudbuilder = self.__class__.extract_args(*args) if not issubclass(model, models.Model): msg = "First argument should be Django Model" raise NotModelException(msg) key = self._model_key(model) if key in self: msg = "Key '{key}' has already been registered.".format(key=key) raise AlreadyRegistered(msg) self.__setitem__(key, crudbuilder) return crudbuilder
def __new__(cls, clsname, bases, attrs): newclass = super(MetaCrudRegister, cls).__new__(cls, clsname, bases, attrs) if bases: if newclass.model: register(newclass.model, newclass) else: msg = "No model defined in {} class".format(newclass) raise NotModelException(msg) return newclass
def construct_formset(self): """ Returns an instance of the inline formset """ if not self.inline_model or not self.parent_model: msg = "Parent and Inline models are required in {}".format( self.__class__.__name__) raise NotModelException(msg) return inlineformset_factory(self.parent_model, self.inline_model, **self.get_factory_kwargs())