Django排序字段
django-sorting-field的Python项目详细描述
- 这个包实现了一个django form field+小部件,用于对项目进行拖放排序
- 支持使用名为id的字段对任何项进行排序
- 拖放功能已经用html5sortable实现。
已知限制
- 刷新小部件上的项目还没有?支持开箱即用
- 无测试
小部件示例
用法
排序顺序字段应该在包含排序对象的模型上实现。 这允许对同一项集的不同实例进行不同的排序。
假设您有图像旋转木马、旋转木马和图片模型,并且您希望能够 在每个carouselplugin上对同一个carousel实例进行不同的排序。
您还有一个用于carousel的cmsplugin对象。
classCarousel(models.Model):passclassPicture(models.Model):carousel=models.ForeignKey(Carousel,related_name="pictures")image=SomeImageField()name=models.CharField()classCarouselPlugin(CMSPlugin):carousel=models.ForeignKey(Carousel,related_name="x")classCMSCarouselPlugin(CMSPluginBase):model=CarouselPlugindefrender(self,context,instance,placeholder):context.update({"pictures":self.instance.carousel.pictures.all(),})returncontext
通过以下步骤可以实现所需的行为:
向包含订单信息的模型添加一个(可为空)文本字段
classCarouselPlugin(CMSPlugin):carousel=models.ForeignKey(Carousel,related_name="x")carousel_order=models.TextField(null=True)
将sortingformfield添加到cms插件并填充它
fromdjango_sorting_field.fieldsimportSortingFormFieldclassCarouselPluginForm(forms.ModelForm):carousel_order=SortingFormField()def__init__(self,*args,**kwargs):super(CarouselPluginForm,self).__init__(*args,**kwargs)ifself.instance.pk:self.fields["carousel_order"].populate(items=self.instance.carousel.pictures.all(),)classCMSCarouselPlugin(CMSPluginBase):model=CarouselPluginform=CarouselPluginFormdefrender(self,context,instance,placeholder):context.update({"pictures":self.instance.carousel.pictures.all(),})returncontext
最后,对传递给上下文数据的项进行排序
fromdjango_sorting_field.utilsimportsort_by_orderclassCMSCarouselPlugin(CMSPluginBase):model=CarouselPluginform=CarouselPluginFormdefrender(self,context,instance,placeholder):context.update({"pictures":sort_by_order(self.instance.carousel.pictures.all(),self.instance.carousel_order),})returncontext