Django Publishable is_public field

时间:2014-06-12 17:42:26

标签: python django

因此,在工作中,我们使用django-publish发布案例研究。每当发布案例研究时,普通用户都可以查看。但是,如果它处于草稿模式,并且用户以管理员身份登录,则在索引页面上,他应该能够查看所有案例研究,无论是已发布还是仍处于草稿模式,这些案例研究将链接到实际的案例研究页面但是,对于草案模式的研究而言,草案'应该附加到个人网址。希望这是有道理的。

我的问题是' is_public'从普通用户查看时,从Publishable类继承的字段正确显示,但是当管理员登录并尝试查看页面时,is_public字段始终显示为False,即使在数据库中显然为True。

def get_absolute_url(self):
    if self.slug:
        if self.is_public:
            return reverse('case-study', args=(self.slug,))
        else:
            return reverse('case-study', args=(self.slug,)) + '?draft'
    return reverse('work',)

我从模型get_absolute_url方法得到这个,因此当以管理员身份登录时,每个案例研究都有'?draft'附加到它。

我很感激任何帮助。

这是完整的模型:

class CaseStudy(Publishable, Sortable):
# Text
title = models.CharField(max_length=100)
subtitle = models.CharField(max_length=100, blank=True, null=True)
description = models.CharField('Summary', max_length=255)
challenge = models.TextField('The Challenge')
solution = models.TextField('Our Solution')

# Images
image = models.ImageField('Thumbnail', upload_to="case-study/thumbs")
header = models.ImageField('Header Image', upload_to="case-study/header")

# Client Meta
client = models.ForeignKey(Client, null=True, blank=True)
expertise = models.ManyToManyField(Expertise)
capability = models.ManyToManyField(Capabilty)
services = models.TextField(blank=True, help_text='One per line')

# Formatting
scheme = models.CharField('Color Palette', max_length=100, choices=COLOR_SCHEMES)

# Display Options
home_page = models.BooleanField('Feature on Home Page?', default=False)
work_page = models.BooleanField('Feature on Work Page?', default=False)    

# Meta
slug = models.SlugField()
created = CreationDateTimeField()
modified = ModificationDateTimeField()

class Meta(Publishable.Meta, Sortable.Meta):
    verbose_name = 'Case Study/Story'
    verbose_name_plural = 'Case Studies'

class PublishMeta(Publishable.PublishMeta):
    publish_reverse_fields = ['sections', 'related_projects']

def __unicode__(self):
    return u'%s' % self.title

def get_absolute_url(self):
    if self.slug:
        if self.is_public:
            return reverse('case-study', args=(self.slug,))
        else:
            return reverse('case-study', args=(self.slug,)) + '?draft'
    return reverse('work',)

0 个答案:

没有答案