def handle(self, **options): cource_id = options['cource_id'] if cource_id: cource_id = int(cource_id) if not cource_id: raise Exception("--cource_id is required!") cource_src = Cource.objects.get(id=cource_id) cource_dst = Cource() cource_dst.__dict__ = copy.deepcopy(cource_src.__dict__) cource_dst.id = None cource_dst.name += " copy" cource_dst.save() for task_src in Task.objects.filter(cource=cource_src): if task_src.has_parent(): continue print "Copy task {0}".format(task_src.title.encode("utf-8")) task_dst = Task() task_dst.__dict__ = copy.deepcopy(task_src.__dict__) task_dst.id = None task_dst.cource = cource_dst task_dst.save() for subtask_src in task_src.get_subtasks(): print ">Copy subtask {0}".format(subtask_src.title.encode("utf-8")) subtask_dst = Task() subtask_dst.__dict__ = copy.deepcopy(subtask_src.__dict__) subtask_dst.id = None subtask_dst.parent_task = task_dst subtask_dst.cource = cource_dst subtask_dst.save()
def add_task(request): user = request.user if not request.method == 'POST': return HttpResponseForbidden() for key in ['cource_id', 'group_id', 'parent_id', 'task_title', 'task_text', 'max_score']: if key not in request.POST: return HttpResponseForbidden() hidden_task = False if 'hidden_task' in request.POST: hidden_task = True try: cource_id = int(request.POST['cource_id']) task_title = request.POST['task_title'].strip() task_text = request.POST['task_text'].strip() max_score = int(request.POST['max_score']) group_id = request.POST['group_id'] if not group_id or group_id == 'null': group_id = None else: group_id = int(group_id) parent_id = request.POST['parent_id'] if not parent_id or parent_id == 'null': parent_id = None else: parent_id = int(parent_id) except ValueError: #not int return HttpResponseForbidden() cource = get_object_or_404(Cource, id = cource_id) group = None if group_id is not None: group = get_object_or_404(Group, id = group_id) parent = None if parent_id is not None: parent = get_object_or_404(Task, id = parent_id) if not cource.user_can_edit_cource(user): return HttpResponseForbidden() max_weight_query = Task.objects.filter(cource=cource) if group: max_weight_query = max_weight_query.filter(group=group) if parent: max_weight_query = max_weight_query.filter(parent_task=parent) tasks = max_weight_query.aggregate(Max('weight')) _, max_weight = tasks.items()[0] if max_weight is None: max_weight = 0 max_weight += 1 task = Task() task.cource = cource task.group = group task.parent_task = parent task.weight = max_weight task.title = task_title task.task_text = task_text task.score_max = max_score task.is_hidden = hidden_task task.updated_by = user task.save() return HttpResponse("OK")