Существует ли способ отфильтровать queryset в django администраторе?

Stewart,

, Возможно, рассматривают это решение. Это (также!) неопределенный поставщик.

SELECT count([processed_timestamp]) AS notnullrows, 
       count(*) - count([processed_timestamp]) AS nullrows 
FROM table

Что касается эффективности, это избегает 2x, индекс ищет/представляет сканирования/независимо от того, что в виде таблицы включением результатов на одной строке. Если Вы абсолютно требуете, чтобы 2 строки в результате, два передал по набору, может быть неизбежным из-за unioning, агрегируется.

Hope это помогает

16
задан andrew 30 October 2009 в 21:02
поделиться

2 ответа

Это не задокументировано, но стандартное представление списка изменений принимает обычные параметры фильтра набора запросов в качестве аргументов GET. Итак, вы можете сделать:

/admin/myapp/bar/?user__username=foo
26
ответ дан 30 November 2019 в 15:38
поделиться

Все, что вам нужно сделать, это переопределить метод get_queryset () в вашем ModelAdmin. Примерно так:

class ThisAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        """
        Filter the objects displayed in the change_list to only
        display those for the currently signed in user.
        """
        qs = super(ThisAdmin, self).get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(owner=request.user)

Преимущество этого подхода в том, что он не загромождает ваши красивые симпатичные URL-адреса администратора (и, следовательно, делает для ваших пользователей чрезвычайно очевидным, как просматривать объекты других людей).

25
ответ дан 30 November 2019 в 15:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: