Получение неправильной ссылки при попытке вернуться на последнюю страницу
Пытаюсь создать функцию для возврата на последнюю страницу, но slug неверный, и я не могу получить правильный slug.
models.py
class Checklist(models.Model):
title = models.CharField(max_length=55)
slug = models.SlugField(max_length=500, unique=True, blank=True)
due_date = models.DateTimeField()
check_completed = models.BooleanField(default=False)
notes = models.ManyToManyField(Note, blank=True)
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
super(Checklist, self).save(*args, **kwargs)
def get_url(self):
return reverse('task_detail', kwargs={
'slug':self.slug
})
def return_url(self):
return reverse('project_detail', kwargs={
'slug':self.slug
})
def __str__(self):
return self.title
@property
def last_comment(self):
return self.notes.latest("date")
class Task(models.Model):
title = models.CharField(max_length=55, null=True, blank=True)
slug = models.SlugField(max_length=500, unique=True, blank=True)
task_completed = models.BooleanField(default=False)
description = models.TextField(default="Task description")
start_date = models.DateTimeField()
due_date = models.DateTimeField()
checklist = models.ManyToManyField(Checklist, blank=True)
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
super(Task, self).save(*args, **kwargs)
def __str__(self):
return self.title
@property
def num_checklists(self):
return self.checklist.count()
@property
def num_checklist_completed(self):
return self.checklist.filter(check_completed = True).count()
class Project(models.Model):
project_manager = models.ForeignKey(Profile, on_delete=CASCADE)
title = models.CharField(max_length=55, null=True, blank=True)
developers = models.ManyToManyField(Profile, related_name='projects')
slug = models.SlugField(max_length=500, unique=True, blank=True)
description = models.TextField(default="Project description")
date = models.DateTimeField(auto_now_add=True)
start_date = models.DateTimeField()
due_date = models.DateTimeField()
tasks = models.ManyToManyField(Task, blank=True)
teams = models.ManyToManyField(Team, blank=True)
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
super(Project, self).save(*args, **kwargs)
def get_url(self):
return reverse('project_detail', kwargs={
'slug':self.slug
})
def __str__(self):
return self.title
views.py
def teams(request):
'''
Display all teams
'''
teams = Team.objects.all()
context = {
'teams': teams,
}
return render(request, 'projects/teams.html', context)
def projects(request, slug):
'''
Display all projects to given team
'''
team = get_object_or_404(Team, slug=slug)
projects = Project.objects.filter(teams=team)
try:
last_project = Project.objects.latest('date')
except:
last_project = []
context = {
'projects': projects,
'team': team,
'last_project': last_project,
}
return render(request, 'projects/projects.html', context)
def project_detail(request, slug):
'''
Detailed view of given project
'''
project = get_object_or_404(Project, slug=slug)
tasks = Task.objects.filter(task_completed=False, project=project)
context = {
'tasks': tasks,
'project': project,
'title': tasks
}
return render(request, 'projects/tasks.html', context)
def task_detail(request, slug):
'''
Detailed view of all tasks on given project
'''
checklist = get_object_or_404(Checklist, slug=slug)
context = {
'checklist': checklist,
'title': checklist,
}
return render(request, 'projects/checklist.html', context)
В функции "return_url" в чеклисте я пытаюсь вернуться к задаче, которая "владеет" чеклистом. Однако я могу получить только self.slug, slug для контрольного списка, а не для задачи, поэтому в итоге я получаю неправильное перенаправление. Он говорит: projects/task/slug-for-checklist
Должно быть projects/task/slug-for-task