Stewart,
, Возможно, рассматривают это решение. Это (также!) неопределенный поставщик.
SELECT count([processed_timestamp]) AS notnullrows,
count(*) - count([processed_timestamp]) AS nullrows
FROM table
Что касается эффективности, это избегает 2x, индекс ищет/представляет сканирования/независимо от того, что в виде таблицы включением результатов на одной строке. Если Вы абсолютно требуете, чтобы 2 строки в результате, два передал по набору, может быть неизбежным из-за unioning, агрегируется.
Hope это помогает
Это не задокументировано, но стандартное представление списка изменений принимает обычные параметры фильтра набора запросов в качестве аргументов GET. Итак, вы можете сделать:
/admin/myapp/bar/?user__username=foo
Все, что вам нужно сделать, это переопределить метод 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-адреса администратора (и, следовательно, делает для ваших пользователей чрезвычайно очевидным, как просматривать объекты других людей).