我有一个博客的Entry类,它有两个字段,live和draft,它们引用了sustom models.Manager。这适用于我的应用程序;但管理员以某种方式引用我的LiveEntryManager。
以下是两位经理:
class LiveEntryManager(models.Manager):
def get_query_set(self):
return super(LiveEntryManager, self).get_queryset().filter(status=self.model.LIVE_STATUS)
class DraftEntryManager(models.Manager):
def get_query_set(self):
return super(DraftEntryManager, self).get_queryset().filter(status=self.model.DRAFT_STATUS)
这是我的班级:
class Entry(models.Model):
LIVE_STATUS = 1
DRAFT_STATUS = 2
HIDDEN_STATUS = 3
STATUS_CHOICES = (
(LIVE_STATUS, 'Live'),
(DRAFT_STATUS, 'Draft'),
(HIDDEN_STATUS, 'Hidden'),
)
title = models.CharField(max_length=250)
excerpt = models.TextField(blank=True, help_text='Excerpt Text')
body = models.TextField(help_text='Body Text')
pub_date = models.DateField()
slug = models.SlugField(unique_for_date='pub_date')
pub_date = models.DateTimeField(default=datetime.datetime.now)
author = models.ForeignKey(User)
enable_comments = models.BooleanField(default=True)
status = models.IntegerField(choices=STATUS_CHOICES, default="LIVE_STATUS")
categories = models.ManyToManyField(Category)
excerpt_html = models.TextField(editable=False, blank=True)
body_html = models.TextField(editable=False, blank=True)
live = LiveEntryManager()
draft = DraftEntryManager()
objects = models.Manager()
class Meta:
verbose_name_plural = "Entries"
ordering = ['-pub_date']
def __unicode__(self):
return self.title
我在下面的网址中使用此内容:
url(r'^$',
ArchiveIndexView.as_view(queryset=Entry.live.all(),
date_field='pub_date'),
name='coltrane_entry_archive_index'),
url(r'^draft/$',
ArchiveIndexView.as_view(queryset=Entry.draft.all(),
date_field='pub_date'),
name='coltrane_entry_archive_index'),
我的问题是管理页面仅返回基于LiveEntryManager的结果。一旦我将它们从实时更改为草稿,它们将从条目管理显示中删除。我不确定管理员如何使用该管理器来过滤它的结果。
我在管理页面中的逻辑非常简单:
from models import Entry
class EntryAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug': ['title']}
admin.site.register(Entry, EntryAdmin)