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), и теперь я ищу возможность обновить его.