diff --git a/tasks/views.py b/tasks/views.py index 8c86c02..1596118 100644 --- a/tasks/views.py +++ b/tasks/views.py @@ -424,8 +424,18 @@ class TaskDetailView(View): task.title = request.POST.get('title', task.title) task.description = request.POST.get('description', '') - task.status = request.POST.get('status', task.status) - task.priority = request.POST.get('priority', task.priority) + + # Validate status against allowed choices + status = request.POST.get('status', task.status) + valid_statuses = [choice[0] for choice in Task.STATUS_CHOICES] + if status in valid_statuses: + task.status = status + + # Validate priority against allowed choices + priority = request.POST.get('priority', task.priority) + valid_priorities = [choice[0] for choice in Task.PRIORITY_CHOICES] + if priority in valid_priorities: + task.priority = priority due_date = request.POST.get('due_date') task.due_date = due_date if due_date else None @@ -433,7 +443,13 @@ class TaskDetailView(View): due_time = request.POST.get('due_time') task.due_time = due_time if due_time else None - task.recurrence = request.POST.get('recurrence', 'none') + # Validate recurrence against allowed choices + recurrence = request.POST.get('recurrence', 'none') + valid_recurrences = [choice[0] for choice in Task.RECURRENCE_CHOICES] + if recurrence in valid_recurrences: + task.recurrence = recurrence + else: + task.recurrence = 'none' task.save() @@ -466,15 +482,33 @@ class TaskCreateView(View): if not request.user.is_authenticated: return redirect('login') + # Validate status against allowed choices + status = request.POST.get('status', 'pending') + valid_statuses = [choice[0] for choice in Task.STATUS_CHOICES] + if status not in valid_statuses: + status = 'pending' + + # Validate priority against allowed choices + priority = request.POST.get('priority', 'medium') + valid_priorities = [choice[0] for choice in Task.PRIORITY_CHOICES] + if priority not in valid_priorities: + priority = 'medium' + + # Validate recurrence against allowed choices + recurrence = request.POST.get('recurrence', 'none') + valid_recurrences = [choice[0] for choice in Task.RECURRENCE_CHOICES] + if recurrence not in valid_recurrences: + recurrence = 'none' + task = Task.objects.create( user=request.user, title=request.POST.get('title'), description=request.POST.get('description', ''), - status=request.POST.get('status', 'pending'), - priority=request.POST.get('priority', 'medium'), + status=status, + priority=priority, due_date=request.POST.get('due_date') or None, due_time=request.POST.get('due_time') or None, - recurrence=request.POST.get('recurrence', 'none'), + recurrence=recurrence, ) tag_ids = request.POST.getlist('tags')