我制作了一个展示文章的模型,当你创建一篇文章时,你可以选择这篇文章是否会成为特色文章。
所以这基本上就是我在文章模型中的内容:
class Article(ModelMeta, TranslatableModel):
taints_cache = True
"""
Press article element,
"""
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
date_realization = models.DateField(_('Realised in'),
default=timezone.now)
image = FilerImageField(verbose_name=_('Featured image'), blank=True,
null=True,
on_delete=models.SET_NULL,
related_name='image_press_article',
help_text=_('Set if the article will be featured'))
sources = models.ManyToManyField(ArticleSource, verbose_name=_('Source'),
blank=False, null=True, related_name='sources_press_article')
regions = models.ManyToManyField(Country, verbose_name=_('Country of the article'),
blank=True, null=True,
related_name='regions_press_article')
global_regions = models.BooleanField('Global', default=True)
featureArticle = models.BooleanField(_('Feature'), help_text=_('Feature this article'), default=False)
然后,我创建了一个显示特色文章的插件。 但事实是,在django插件管理员中,我让用户可以选择他想要显示的文章(最多3个)。 但是在这个选择列表中,列出了我的所有文章。
我想要,仅列出在我的插件管理中选中为“精选”,的文章。而不是拥有所有的文章。
这里有我的cms_plugin模型:
class FeaturedArticlePlugin(CMSPlugin):
selected_article = SortedManyToManyField(Article, blank=True, verbose_name=_('Selected articles'),
help_text=_('Select the featured articles to display'))
def __str__(self):
return u'%s Selected articles' % self.selected_article.all()
def copy_relations(self, oldinstance):
self.selected_article = oldinstance.selected_article.all()
在我的cms_plugins.py中:
class PressPlugin(CMSPluginBase):
module = 'Press'
class PressFeaturedArticlePlugin(PressPlugin):
module = _('Press')
name = _('Press feature')
model = FeaturedArticlePlugin
render_template = 'djangocms_press/plugins/feature_article.html'
number_article = 3
def render(self, context, instance, placeholder):
"""
Get a list of selected_articles
"""
selected_article = instance.selected_article.all()
number_selected_article = selected_article.count()
feature_article_list = list(selected_article[:self.number_article])
context['instance'] = instance
context['feature_article_list'] = feature_article_list
return context
plugin_pool.register_plugin(PressFeaturedArticlePlugin)
所以,我确信这并不复杂,但我不能指出这一点。
任何人都有线索?
修改 根据我的理解,所有关于所有文章展示的内容都是这一行:
selected_article = SortedManyToManyField(Article, blank=True, verbose_name=_('Selected articles'),
help_text=_('Select the featured articles to display'))
所以我想要做的是使用featureArticle = True过滤这个selected_article。 但该怎么做?
答案 0 :(得分:0)
我不确定我是否遗漏了某些内容,但是,您不能在这里应用过滤器吗?
selected_article = instance.selected_article.all().filter(featureArticle=true)
number_selected_article = selected_article.count()
或者是后面的行问题?
feature_article_list = list(selected_article[:self.number_article])
如果您的问题是选择额外的文章,也许您需要按日期订购它们并仅选择必要的?
feature_article_list = list(Articles.all().order_by('-created')[:self.number_article - number_selected_article]
哪个只会选择额外的必需品?
编辑:你的情况让我想起曾经遇到过的一个问题。因此,我会将您推荐给过去帮助过我的同一页,以防万一您能够解决这个问题。
Restrict django admin change permissions
编辑2:"我创建了一个显示精选文章的插件。但事实是,在django插件管理员中,我让用户可以选择他想要显示的文章(最多3个)。但是在这个选择列表中,列出了我的所有文章。"
如果所有文章都显示在那里,那还不错吗?如果没有全部显示,你如何在他们中间做出选择?