def text_description_to_model(module, text, app_label, admin_register=True): dct = yaml.load(text) for model_name in dct.keys(): fields = dct[model_name]['fields'] attrs = {} for field in fields: attrs[field['id']] = _field_by_type(field['type'], field['title']) attrs['__module__'] = module.__name__ model_name = str(model_name).capitalize() NewModel = type(model_name, (Model,), attrs) setattr(module, model_name, NewModel) new_ct = ContentType() new_ct.app_label = app_label new_ct.name = model_name new_ct.model = model_name.lower() new_ct.save() if admin_register: class Admin(admin.ModelAdmin): pass admin.site.register(NewModel, Admin) if admin_register: reload(import_module(settings.ROOT_URLCONF)) clear_url_caches()
def install(sender, created_models, **kwargs): for model in get_models(): # TODO change to django.apps if getattr(model, 'BMFMeta', False): kwargs = { 'app_label': model._meta.app_label, 'model': model._meta.model_name, } # LOOK: maybe we could move this to a signal try: ct = ContentType.objects.get(**kwargs) except ContentType.DoesNotExist: ct = ContentType(**kwargs) ct.name = model._meta.verbose_name_raw ct.save() if model._bmfmeta.number_cycle: count = NumberCycle.objects.filter(ct=ct).count() if not count: obj = NumberCycle(ct=ct, name_template=model._bmfmeta.number_cycle) obj.save() return None
def on_add_module(request,module_type,parent_id): context = {} try: parent = Module.objects.get(id=parent_id) context.update({'parent_name':parent.name}) context.update({'app_name':parent.app.name}) # title title = "" if module_type=="G": title = _(u"THÊM NHÓM MODULE") elif module_type=="M": title = _(u"THÊM MODULE") elif module_type=="P": title = _(u"THÊM QUYỀN") context.update({'title':title}) if request.POST: #auto commit transaction.set_autocommit(False) #parameter code = request.POST["txtCode"] name = request.POST["txtName"] action = request.POST["txtAction"] url = request.POST["txtUrl"] icon = request.POST["txtIcon"] ord_num = request.POST["txtOrd"] #new Module module = Module() module.code = code module.name = name module.action = action module.url = url module.type = module_type module.icon_class = icon module.ord = ord_num if request.POST.get('ckStatus'): module.status = "1" else: module.status = "0" module.parent = parent module.app = parent.app module.user_name = request.user.username if module_type=="M": #Insert content type content_type = ContentType() content_type.app_label = parent.app.code content_type.model = code content_type.name = name content_type.save() module.content_type = content_type elif module_type=="P": #Insert permission permission = Permission() permission.content_type = parent.content_type permission.name = name permission.codename = code permission.save() module.permission = permission #save module module.save() #commit transaction.commit() return HttpResponseRedirect(str("%s?app_id="+str(parent.app.id)) % resolve_url("module")) except Exception as ex: transaction.rollback() context.update({'has_error':str(ex)}) finally: context.update(csrf(request)) return render_to_response("admin/module/add-module.html", context, RequestContext(request))