def add(request): # brace yourself traveler, scary code ahead if request.method == 'POST': form = NewRuleForm(request.POST) if form.is_valid(): rule = Rule() rule.name = form.cleaned_data["name"] for app in core.get_apps(): for model in app.get_models(): for inst in model.objects.all(): if inst == form.cleaned_data["origin_instance"]: rule.origin_device_type = ContentType.objects.get(app_label=app.name, model=model.__name__.lower()) break rule.option = form.cleaned_data["option"] # rule.origin_object_id = rule.origin_device_type.get_object_for_this_type().__cls__.objects.filter(name=form.cleaned_data["origin_instance"].name) rule.origin_object_id = form.cleaned_data["origin_instance"].pk rule.origin_attribute = form.cleaned_data["origin_attribute"] for app in core.get_apps(): for model in app.get_models(): for inst in model.objects.all(): if inst == form.cleaned_data["destination_instance"]: rule.destination_device_type = ContentType.objects.get(app_label=app.name, model=model.__name__.lower()) break rule.destination_object_id = form.cleaned_data["destination_instance"].pk rule.destination_method = form.cleaned_data["destination_method"] rule.save() return HttpResponseRedirect('/rule/') else: # TODO: a bit hacky request.include_form = True return index(request) else: return HttpResponseRedirect('/rule/')