如何使用默认情况下的过滤器在django-admin中显示数据库?

时间:2010-02-03 14:59:28

标签: django django-models django-admin

我每次看到它时都会默认过滤数据库(当我保存更改或第一次打开数据库时)。 谁能告诉我怎么做?

2 个答案:

答案 0 :(得分:4)

使用自定义custom Managers

可以实现这一点

假设您有一个名为Book的课程:

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=50)

并且您希望书籍对象的管理页面仅显示Roald Dahl的书籍,然后您可以添加自定义管理器:

class DahlBookManager(models.Manager):
    def get_query_set(self):
        return super(DahlBookManager, self).get_query_set().filter(author='Roald Dahl')

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=50)

    objects = models.Manager()
    dahl_objects = DahlBookManager()

然后,您只需指定您的ModelAdmin应使用dahl_objects经理,其解释为here

答案 1 :(得分:0)

这是我的models.py:

from django.db import models

class DahlBookManager(models.Manager):
    def get_query_set(self):
    return super(DahlBookManager, self).get_query_set().filter(processed=False)

class Book(models.Model):
    book_name = models.CharField('book',max_length=1000,null=True, blank=True)
    url = models.CharField(max_length=1000,null=True, blank=True)
    processed = models.BooleanField('Done',)

    def __str__(self):
        return u'%s' % (self.book_name)

    def url1(self):
    return '<a href="%s">%s</a>' % (self._url, self.url)
    site_url1.allow_tags = True

    class Admin:
    pass

    class Meta:
        db_table = 'books'

    objects = models.Manager()
    dahl_objects = DahlBookManager()

这是我的admin.py:

from django.contrib import admin
from mybooks.booksdb.models import Book
from django import forms

admin.autodiscover()

class BookAdmin(admin.ModelAdmin):
    def queryset(self,request):
        qs=self.model.objects.get_query_set()
        ordering = self.ordering or ()      
        if ordering:
            qs=qs.order_by(*ordering)
        return qs
....

默认情况下没有过滤器。我的小姐在哪里?