Как показать базу данных в django-admin, используя фильтры по умолчанию? - PullRequest
0 голосов
/ 03 февраля 2010

Мне нужно фильтровать базу данных по умолчанию каждый раз, когда я ее вижу (при сохранении изменений или при первом открытии базы данных). Кто-нибудь может сказать мне, как это сделать?

Ответы [ 2 ]

4 голосов
/ 03 февраля 2010

Это возможно с пользовательскими пользовательскими менеджерами :

Скажем, у вас есть класс с именем Book:

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

И вы хотите, чтобы на страницах администратора объектов книг отображались только книги Роальда Даля, тогда вы можете добавить собственный менеджер:

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, что объясняется здесь .

0 голосов
/ 03 февраля 2010

Вот мои модели.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
....

Нет фильтра по умолчанию. Где моя мисс?

...