首页 > 解决方案 > django过滤器选择,模板上的顺序选择,按过滤器中写入的顺序

问题描述

我有一个 Django 过滤器,它有 4 个选项。我想按照我在过滤器中编写它们的顺序在模板上对这些选项进行排序。

过滤器.py:

RarityChoices = {
  ('common', 'Common'),
  ('uncommon', 'Uncommon'),
  ('rare', 'Rare'),
  ('mythic', 'Mythic')
}

rarity  = ChoiceFilter(field_name='rarity', empty_label='Any', choices=sorted(RarityChoices), widget=RadioSelect())

模板.html:

<div>
  <label class="mb-1" for="id_type">Rarity:</label>
  {{ card_filter.form.rarity}}
</div>

截屏:

在此处输入图像描述

如果我将过滤器更改为:

rarity  = ChoiceFilter(field_name='rarity', empty_label='Any', choices=RarityChoices, widget=RadioSelect())

过滤器在模板上如下所示:

在此处输入图像描述

既不是我想要的顺序,也不是filter.py文件中列出的顺序。

标签: pythonpython-3.xdjango

解决方案


RarityChoices = {
  ('common', 'Common'),
  ('uncommon', 'Uncommon'),
  ('rare', 'Rare'),
  ('mythic', 'Mythic')
}

是一个集合...集合是无序的...将其更改为列表或元组

RarityChoices = [  # [ is for list
  ('common', 'Common'),
  ('uncommon', 'Uncommon'),
  ('rare', 'Rare'),
  ('mythic', 'Mythic')
]

推荐阅读