Arhn - архитектура программирования

Настроить результаты list_filter

Я хотел бы ограничить результаты, которые django «list_filter» отображает в администраторе Django.

Согласно моим моделям ниже, я хочу, чтобы он отображал только категории (в фильтре), которые находятся в категории класса и содержат целое число уровня «1».

Это возможно?

class Category(models.Model):
    category_name = models.CharField(max_length=100, blank=False)
    tier = models.IntegerField(blank=false)
    def __str__(self):
        return self.category_name

class Product(models.Model):
    name = models.CharField ("Name", max_length=400)
    link = models.URLField("Link", max_length=900)
    store = models.ForeignKey(Store)
    category = models.ManyToManyField(Category, blank=True)

В админке у меня есть:

list_filter = ('category')

Я считаю, что мне нужно как-то включить это?

category=Category.objects.get(tier__iexact='1')
13.11.2015

  • Возможный дубликат stackoverflow.com/questions/12354099/ 13.11.2015
  • Я не хочу скрывать это глобально - только для list_filter в разделе администратора. Как это может быть сделано? 14.11.2015

Ответы:


1

Что-то вроде этого должно работать:

from django.contrib import admin
from django.utils.encoding import smart_text
from django.utils.translation import ugettext_lazy as _


class CategoryListFilter(admin.SimpleListFilter):
    title = _('Category')
    parameter_name = 'category'

    def lookups(self, request, model_admin):
        categories = Category.objects.filter(tier=1)
        for obj in categories:
            yield (str(obj.pk), smart_text(obj))

    def queryset(self, request, queryset):

        if self.value():
            return queryset.filter(category__id=self.value())


class ProductAdmin(admin.ModelAdmin):
    list_filter = (CategoryListFilter,)

Документы: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter

14.11.2015
  • Извините - это не работает. Он показывает правильные критерии фильтрации, но НЕ показывает правильный контент при фильтрации. Он возвращает только один (случайный) объект из моей модели. 16.11.2015
  • Ах, мне просто нужно было изменить набор запросов. return queryset.filter(category__id=self.value()) . Вуаля - получилось. Я обновил ваш ответ. 16.11.2015
  • Ага. Совсем пропустил это. Спасибо! 16.11.2015
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..