Django Admin models.Manager

时间:2015-01-13 18:51:17

标签: django django-models

我有一个博客的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)

2 个答案:

答案 0 :(得分:2)

在条目模型中向上移动objects = models.Manager(),使其成为第一个管理员。模型中的第一个经理是默认经理(doc)以及管理员正在使用的内容(code)。

答案 1 :(得分:0)

看起来两个网址都有相同的名称。也许那是你的问题?