因此,在工作中,我们使用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',)