CRUD в разных представлениях в одном шаблоне

Я использую один и тот же шаблон с двумя различными представлениями, каждое из которых применяет один фильтр к данным.

Проблема вызвана тем, что этот шаблон имеет CRUD функциональность. Поэтому, когда он используется, я не могу выбрать, куда будет направлен редирект.

Я могу сделать другие представления и url для каждого CRUD, но я думаю, что это не лучшая практика DRY.

url.py для todolistapp

urlpatterns = [
    path('', views.todolist, name='todolist',),
    path('me', views.todolist_mine, name='todolist_mine'),
    path('delete/<task_id>', views.delete_task,name='delete_task'),
    path('edit/<task_id>', views.edit_task,name='edit_task'),   
    path('complete/<task_id>', views.complete_task, name='complete_task'),
    path('incomplete/<task_id>', views.incomplete_task,name='incomplete_task'),
]

часть файла views.py

@login_required
def todolist(request):
    if request.method == 'POST':
        form = TaskForm(request.POST or None)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.manager = request.user
            instance.save()
        messages.success(request,("Tarefa adicionada"))
        return redirect('todolist')
    else:
        me_page = False
        form = TaskForm
        all_tasks = Tasks.objects.filter(manager=request.user)
        all_users = Tasks.objects.all()
        is_responsible = Tasks.objects.filter(responsible=request.user, done=False)
        n_is_responsible = is_responsible.count()
        return render(request,'todolist.html',{ 'form':form,
                                                'all_tasks':all_tasks,
                                                'all_users':all_users,
                                                'is_responsible':is_responsible,
                                                'n_is_responsible':n_is_responsible,
                                                'me_page':me_page})

@login_required
def todolist_mine(request):
    if request.method == 'POST':
        form = TaskForm(request.POST or None)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.manager = request.user
            instance.save()
        messages.success(request,("Tarefa adicionada"))
        return redirect('todolist_mine')
    else:
        me_page = True
        form = TaskForm
        all_tasks = Tasks.objects.filter(responsible=request.user)
        all_users = Tasks.objects.all()
        is_responsible = Tasks.objects.filter(responsible=request.user, done=False)
        n_is_responsible = is_responsible.count()
        return render(request,'todolist.html',{ 'form':form,
                                                'all_tasks':all_tasks,
                                                'all_users':all_users,
                                                'is_responsible':is_responsible,
                                                'n_is_responsible':n_is_responsible,
                                                'me_page':me_page})

ЗДЕСЬ ПРОБЛЕМА С РЕДИРЕКТОМ

@login_required
def edit_task(request,task_id):
    if request.method == 'POST':
        task = Tasks.objects.get(pk=task_id)
        form = TaskForm(request.POST or None, instance = task)
        if form.is_valid():
            form.save()
            messages.success(request,("Tarefa modificada"))
        else:
            messages.warning(request,("Ocorreu um erro ao atualizar!"))
        return redirect('todolist')
    else:        
        task_obj = Tasks.objects.get(pk=task_id)
        all_users = User.objects.all()
        return render(request,'edit_task.html',{'task_obj':task_obj,
                                                'all_users':all_users})

Как видите, я уже повторил свой код в views.py ("todolis и todolist_mine), и теперь я ищу возможность обновить его.

Вернуться на верх