django cms插件,显示已检查特定值的模型

时间:2016-02-09 14:28:38

标签: django django-cms

我制作了一个展示文章的模型,当你创建一篇文章时,你可以选择这篇文章是否会成为特色文章。

所以这基本上就是我在文章模型中的内容:

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。 但该怎么做?

1 个答案:

答案 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个)。但是在这个选择列表中,列出了我的所有文章。"

如果所有文章都显示在那里,那还不错吗?如果没有全部显示,你如何在他们中间做出选择?