Почему вы используете строки для представления списка? Это довольно странно, когда вы можете использовать Python.
Ваш list(my_list)
должен просто возвращать список символов X. list('abcd')
приводит к ['a', 'b', 'c', 'd']
.
choices
ожидает список кортежей. Просто измените ваш код, чтобы он возвращал список кортежей вместо строкового представления списка кортежей.
def header_search():
cat_values = []
cats_list = categories.objects.all().order_by('category', 'values')
for cat in cats_list:
cat_values.append((cat.values, cat.values))
return cat_values
PS: с этим методом ваш выбор будет заполнен только один раз (за загрузку django). Если вам нужны динамические значения, более подходящее место для этого - функция init формы.
class MyForm(..):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['category'].choices = my_choices