【问题标题】:How to show database in django-admin using filters by default?默认情况下如何使用过滤器在 django-admin 中显示数据库?
【发布时间】:2011-01-12 15:57:06
【问题描述】:

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

【问题讨论】:

  • 我的回答回答了我认为您要问的问题 - 如果它没有回答您的意思,您需要澄清您的问题。
  • 我有一张桌子。其中一个字段名称为“已处理”(布尔值)。而且我不想看到默认情况下已经“处理”的行。

标签: django django-models django-admin


【解决方案1】:

这是我的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
....

默认没有过滤器。我的小姐呢?

【讨论】:

  • 要在管理员中使用 DahlBookManager,请在 queryset 方法中设置 qs=self.model.dahl_objects.get_query_set()
【解决方案2】:

这可以通过自定义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 中有解释。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-16
    • 2010-10-25
    • 2012-05-11
    • 2022-12-31
    • 2022-12-07
    • 2017-04-10
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多