django cms和自定义插件模型之间有什么关系?

时间:2014-04-19 09:57:11

标签: django django-cms

我最近第一次与django cms合作,我创建了一个用于上传图片的图库插件。

这是一个非常简单的插件,使用的ImageGalleryPlugin模型继承自CMSPluginBase,然后是Image模型,其中ForeignKey来自图库。

使用占位符将图库插件附加到页面,然后在我创建apphook的图库中查看图像,以将插件模板链接到类似的视图;

def detail(request, page_id=None, gallery_id=None):
    """
    View to display all the images in a chosen gallery
    and also provide links to the other galleries from the page
    """
    gallery = get_object_or_404(ImageGalleryPlugin, pk=gallery_id)
    # Then get all the other galleries to allow linking to those
    # from within a gallery
    more_galleries = ImageGalleryPlugin.objects.all().exclude(pk=gallery.id)
    images = gallery.images_set.all()

    context = RequestContext(request.context, {
        'images': images,
        'gallery': gallery,
        'more_galleries': more_galleries
    })
    return render_to_template('gallery-page.html', context)

现在我对这个方法的问题是当你在CMS中发布一个页面时,它复制了那个页面上的所有ImageGalleryPlugin个对象,所以当我查看图像时,我的数量增加了一倍链接到其他库,因为查询收集重复的对象。

我无法从文档中正确理解这种行为,但我认为CMS保留了您创建的原始对象,然后将副本创建为要显示给用户的库的“实时”版本。

CMS中的哪个位置会发生这种情况,我的ImageGalleryPlugin个对象的ID存储在哪里,以便我只能在此视图中收集正确的ID而不是收集所有对象?

1 个答案:

答案 0 :(得分:0)

我终于解决了自己的问题。

我的CMSPlugin对象与Page之间的关联为myobj.placeholder.page,因此我的过滤解决方案是;

    # Get the ImageGalleryPlugin object
    gallery = get_object_or_404(ImageGalleryPlugin, pk=gallery_id)

    # Get all other ImageGalleryPlugin objects
    galleries = ImageGalleryPlugin.objects.all().exclude(pk=gallery.id)

    # Get all the images in the chosen gallery
    images = gallery.image_field.images

    # Filter the list of other galleries so that we don't get galleries
    # attached to other pages.
    more_galleries = [
        g for g in galleries if unicode(g.placeholder.page.id) == page_id
    ]