В админке Django, создал ссылку на листинг с объектами модели. Но по ссылке открываются не объекты конкретного id, а все объекты в модели. И итоговый URL формата /admin/management/timetask/?e=1, хотя ссылка корректная /admin/management/timetask/?ProjectWorkPlan__id=45, например.
При этом, этот же код работает нормально в другой модели. Подскажите пожалуйста где ошибка.
Стек: Django 4.2.3, PostgreSQL 14.9
models.py
class ProjectWorkPlan(models.Model):
class Status(models.TextChoices):
PLANNED = 'PL', 'Запланирована'
IN_WORK = 'WO', 'В работе'
COMPLETED = 'CO', 'Выполненна'
status_task = models.CharField(max_length=2,
choices=Status.choices,
default=Status.PLANNED, verbose_name='статус')
project = models.ForeignKey(Project, on_delete=models.CASCADE, verbose_name='Проект')
tasklist = models.ForeignKey(Tasklist, on_delete=models.SET_NULL, verbose_name="список задач", null=True)
name_task = models.CharField('название', max_length=255)
description_task = models.TextField('описание', blank=True)
link_to_crm = models.URLField('URL задачи в CRM', blank=True, null=True)
exact_frequency = models.IntegerField('частотность URL', blank=True, null=True)
growth_forecast = models.CharField('прогноз роста', max_length=255, blank=True)
job_url = models.URLField('URL страницы', blank=True, null=True)
priority = models.CharField('приоритетность', max_length=255, blank=True)
class TimeTask(models.Model):
task = models.ForeignKey(ProjectWorkPlan, on_delete=models.CASCADE, verbose_name='Задача')
time_task_date = models.DateField('дата создания', auto_now_add=True)
time = models.DurationField('Затраченное время')
admin.py
@admin.register(ProjectWorkPlan)
class ProjectWorkPlanAdmin(admin.ModelAdmin):
search_fields = ("name_task",)
list_display = ("name_task", "tasklist", "priority", "status_task", "view_time")
list_filter = ("status_task", "tasklist", "priority")
def view_time(self, obj):
count = obj.timetask_set.count()
url = (
reverse("admin:management_timetask_changelist")
+ "?"
+ urlencode({"ProjectWorkPlan__id": f"{obj.id}"})
)
if count:
return format_html('<p><a href="{}">{}</a></p>', url, count)
else:
return format_html('<p>0</p>')
view_time.short_description = "Затраченное время"
@admin.register(TimeTask)
class TimeTask(admin.ModelAdmin):
list_display = ("time", "time_task_date", "task")