Комментарий кибибу к ответу Крейчека верен. Это не проблема Django, а скорее интересный аспект Python. Подведем итог:
В Python круглые скобки используются как для порядка операций, так и для кортежей. Итак:
foo = (2+2)
приведет к тому, что foo будет 4, а не кортеж, который первым и единственным элементом будет 4: 4
foo = (2+2, 3+3)
приведет к тому, что foo будет двумерным кортежем: (4,6)
Чтобы сообщить Python, что вы хотите создать одномерный кортеж, а не просто обозначать порядок операций, используйте запятую:
foo = (2+2,)
приведет к тому, что foo будет одномерным кортежем, первый и единственный элемент которого равен 4: (4,)
Итак, для вашего сценария:
class CalcForm(forms.Form):
item = forms.ChoiceField(choices=(('17815', '17816'),))
даст то, что вы хотите. Использование списка также является отличным решением (на мой взгляд, более Pythonic), но, надеюсь, этот ответ будет информативным, поскольку он может возникнуть в других случаях.
Например:
print("foo: %s" % (foo))
может выдавать ошибку, если foo является итеративным, но:
print("foo: %s" % (foo,))
или
print("foo: %s" % [foo])
будет правильно преобразовывать foo в строку независимо от того, является ли она итеративной или нет.
Документация: http://docs.python.org/2/tutorial/datastructures.html#tuples-and-sequences