【发布时间】:2013-06-04 15:57:35
【问题描述】:
我为 Django-CMS 编写了一个轮播插件,用于显示屏幕截图。底层模型有一些与轮播相关的参数(高度、动画样式等),以及ForeignKey 到ScreenshotGroup:
class ScreenshotGroup(models.Model):
name = models.CharField(max_length=60)
screenshots = models.ManyToManyField(Screenshot, through="ScreenshotGroupMember")
class Screenshot(models.Model):
name = models.CharField(max_length=60)
desc = models.TextField(_("description"), blank=True)
img = models.ImageField(upload_to='img/')
class CarouselPluginModel(CMSPlugin):
group = models.ForeignKey(ScreenshotGroup)
height = models.IntegerField()
...
轮播的view方法包含:
context['item_list'] = instance.group.screenshots.all()
(其实因为我用的是Django-CMS,所以在cms_plugins.pyrender方法中,而不是view方法中。)
模板通过以下方式引用截图字段:
{% for item in item_list %}
{{ item.name }}
{{ item.desc }}
...{{ item.img }}...
{% endfor %}
我的问题是:我想推广我的轮播插件以在其他项目中重用它,所以这不依赖于Screenshot 模型。我可以用include 替换模板的for 循环的内容,以允许每个项目指定如何在轮播中显示项目。但是我如何概括CarouselPluginModel 的ForeignKey?
在任何特定应用程序中,我只希望允许一种类型的模型(在我的示例中为ScreenshotGroup)- 我不希望管理控制台允许包含任何其他模型。
谢谢!
【问题讨论】:
标签: django dry code-reuse django-cms