Django - От линейного к списочному отображению

Для кода ниже я хотел бы отобразить последние 10 задач (TaskInline) в UserAdmin и иметь кнопку под этими 10 задачами (inline), которая приведет к TaskAdmin с задачами, отфильтрованными пользователем.

from django.contrib import admin
from django.contrib.auth.models import User
from django.db import models


class Task(models.Model):
    title = models.CharField(max_length=50)
    description = models.TextField()
    performer = models.ForeignKey(User, on_delete=models.CASCADE)


class TaskInline(admin.TabularInline):
    max_num = 10  # display last 10 tasks


@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    inlines = TaskInline,


@admin.register(Task)
class TaskAdmin(admin.ModelAdmin):
    list_filter = 'performer',

Как я могу это сделать? Должен ли я изменить шаблон для TaskInline?

Для создания табличных строк можно использовать следующий код:

class TaskInline(admin.TabularInline):
    model = Task
    extra = 1
    
    def get_queryset(self):
        qs = Task.objects.filter(user=self.request.user)


@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    list_display = ['id', 'name', ...]
    inlines = (TaskInline,)

Примечание: вам не хватает поля user в Task.

Переписать шаблон change_form.html и добавить

{% block inline_field_sets %}
    {{ block.super }}
     <a href="{% url 'admin:YOURAPP_task_changelist' %}?user__id__exact={{ object_id }}">View all tasks</a>
{% endblock %}

В случае необходимости, вот как перезаписать ваш шаблон только для User Создайте html файл YOURAPP/templates/admin/YOURAPP/User/change_form.html и добавьте

{% extends "admin/change_form.html" %}
{% load i18n admin_urls %}
{% block object-tools-items %}

{% block inline_field_sets %}
    {{ block.super }}
     <a href="{% url 'admin:YOURAPP_task_changelist' %}?user__id__exact={{ object_id }}">View all tasks</a>
{% endblock %}

Тогда ваш UserAdmin будет выглядеть следующим образом

@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    inlines = TaskInline,
    change_form_template = 'admin/YOURAPP/User/change_form.html'
Вернуться на верх