Django 管理员 models.Manager
Django Admin models.Manager
我有一个博客的条目 class,它有两个字段,实时和草稿,引用了一个习惯 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:
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'),
我的问题是管理页面 returns 仅基于 LiveEntryManager 结果。一旦我将它们从实时更改为草稿,它们就会从条目管理显示中删除。我不确定管理员如何使用该管理器来过滤结果。
我在管理页面中的逻辑非常简单:
from models import Entry
class EntryAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug': ['title']}
admin.site.register(Entry, EntryAdmin)
我有一个博客的条目 class,它有两个字段,实时和草稿,引用了一个习惯 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:
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'),
我的问题是管理页面 returns 仅基于 LiveEntryManager 结果。一旦我将它们从实时更改为草稿,它们就会从条目管理显示中删除。我不确定管理员如何使用该管理器来过滤结果。
我在管理页面中的逻辑非常简单:
from models import Entry
class EntryAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug': ['title']}
admin.site.register(Entry, EntryAdmin)