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

  • Bad Lip Reading

    Bad Lip Read

    22 Mart 2011
  • Qmusic Romania

    Qmusic Roman

    8 Temmuz 2011
  • TheSalband Rai

    TheSalband R

    11 NİSAN 2011