如何在Django表单中对多对多字段按字母排序?
实现表单中Songs字段按字母排序的方法
很简单,你不需要修改Song模型的默认排序,只需要在AddPlaylistForm里重写__init__方法,调整songs字段的查询集排序规则就可以了。
直接看修改后的表单代码:
class AddPlaylistForm(forms.ModelForm): class Meta: model = Playlist fields = ['name', 'image', 'description', 'songs'] def __init__(self, *args, **kwargs): # 先调用父类的初始化方法,保证表单基础功能正常 super().__init__(*args, **kwargs) # 按歌曲名称升序排列,如果你Song模型里的名称字段是title,就换成`order_by('title')` self.fields['songs'].queryset = Song.objects.order_by('name')
为什么这么做可行?
- 表单初始化时,我们通过重新赋值
songs字段的queryset属性,替换了默认的查询集 order_by('name')会让查询结果按歌曲名称的字母顺序升序排列(如果要降序可以写成order_by('-name'))- 这个修改只作用于当前表单,完全不会影响数据库中Song模型的默认排序逻辑,也不会影响其他地方对Song模型的使用
如果你的Song模型用来表示歌曲名称的字段不是name,比如是title,只需要把order_by里的参数换成对应的字段名就可以了。
内容的提问来源于stack exchange,提问作者Leaozinho
相关产品推荐
相关产品推荐

