SORU
12 Mayıs 2009, Salı


Varsayılan Django admin filtresi

Nasıl varsayılan filtre seçimi değiştirebilir miyim 'HEPSİ'? Üç değeri olan bir alan status Adı: activate, pending rejected. Django admin list_filter kullanırken, filtre varsayılan olarak 'Tüm' ama varsayılan olarak bekleyen ayarlamak istiyorum. ayarlanır

CEVAP
15 Mayıs 2013, ÇARŞAMBA


Bunu başarmak içinvebir kullanılabilir 'Tüm' bağlantı içinde Kenar Çubuğu (ıe biri olduğunu gösteriyor her yerine gösteren beklemede) Zorundasınız oluşturmak için özel bir liste filtre, devralmasını django.contrib.admin.filters.SimpleListFilter ve süzme 'bekleyen' varsayılan olarak. Bu satırlar boyunca bir şey olmalı

from datetime import date

from django.utils.translation import ugettext_lazy as _
from django.contrib.admin import SimpleListFilter

class StatusFilter(SimpleListFilter):
    title = _('Status')

    parameter_name = 'status'

    def lookups(self, request, model_admin):
        return (
            (None, _('Pending')),
            ('activate', _('Activate')),
            ('rejected', _('Rejected')),
            ('all', _('All')),
        )

    def choices(self, cl):
        for lookup, title in self.lookup_choices:
            yield {
                'selected': self.value() == lookup,
                'query_string': cl.get_query_string({
                    self.parameter_name: lookup,
                }, []),
                'display': title,
            }

    def queryset(self, request, queryset):
        if self.value() in ('activate', 'rejected'):
            return queryset.filter(status=self.value())    
        elif self.value() == None:
            return queryset.filter(status='pending')


class Admin(admin.ModelAdmin): 
    list_filter = [StatusFilter] 

EDİT: Gerektirir Django 1.4 (teşekkürler Simon)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AndroidSale

    AndroidSale

    17 NİSAN 2011
  • lissaandbeauty

    lissaandbeau

    24 Aralık 2011
  • Matthew Morrill

    Matthew Morr

    15 EKİM 2011