Django - добавлять классы во встроенные, только если qs len больше 5

Для TaskInline я хотел бы отобразить его свернутым, если элементов больше 5:

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):
    model = Task

    def get_queryset(self, request):
        qs = super().get_queryset(request)
        if len(qs) > 5:
            self.classes = 'collapse',
        return qs


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

Но трюк, реализованный в методе get_queryset, кажется, не работает (похоже, этот метод выбирает все элементы модели Task).

Где я должен сравнить len, чтобы добавить classes?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для этого нет способа "правильный", но... Чтобы добиться того, чего вы хотите, вы можете выбрать любой метод, который принимает аргумент obj. Как has_view_permission или get_forms или get_formset или get_extra...

Обратите внимание, что вы не получите QuerySet соответствующего менеджера, а вместо этого получите obj, который запрашивается в не встроенном администраторе.

Пример:


class TaskInline(admin.TabularInline):
    model = Task

    def has_view_permission(self, request, obj=None, **kwargs):
        # None for new instances or non object-specific calls
        if obj is not None:  
            # print(obj) -> instance that has Task as inline
            # TODO: fix the following line, because your field might be called differently
            if obj.tasks.count() >= 5:  
                self.classes = list(type(self).classes or []) + ["collapse"]
        return super().has_view_permission(request, obj=obj, **kwargs)

Другие вопросы по теме