#python #python-3.x #django #django-models
#python #python-3.x #django #django-модели
Вопрос:
Предположим, у меня есть целочисленное поле в модели следующим образом:
class Foo(models.Model):
class Bar(models.IntegerChoices):
PARROT = 1
MESSIAH = 2
NAUGHTY_BOY = 3
BLACK_KNIGHT = 4
bar = models.IntegerField(choices=Bar.choices, default=Bar.PARROT)
Как мне преобразовать строковое значение в целое число, чтобы сохранить его, т. Е. то же самое, что, по-видимому, произойдет, если я использую поле в «формах.ModelForm» в виде выпадающего списка? Например. Возьмите «Parrot» и верните 1.
from app.models import Foo
record = get_object_or_404(Foo, id=1)
record.bar = "Parrot"
record.save()
Этот код выдает ошибку:
Field 'bar' expected a number but got 'Parrot'.
Комментарии:
1. Вопрос написан неправильно для воспроизведения.
2. О, чего не хватает?
Ответ №1:
## change choice like this##
PARROT = 1
MESSIAH = 2
NAUGHTY_BOY = 3
BLACK_KNIGHT = 4
YEAR_IN_SCHOOL_CHOICES = [
(PARROT , 'Freshman'),
(MESSIAH , 'Sophomore'),
(NAUGHTY_BOY , 'Junior'),
(BLACK_KNIGHT , 'Senior'),
]
## When using data, you should write it like this##
get_bar_field or html in {{get_bar_field}}
Ответ №2:
Вы можете выполнять выбор таким образом:
bar=(
(1, PARROT)
(2, MESSIAH)
(3, NAUGHTY_BOY)
(4, BLACK_KNIGHT)
)
bar = models.IntegerField (default=1, choices=bar)
Комментарии:
1. Вам не нужно создавать список или словарь, поскольку один уже есть «self.Bar.choices».
2. Но self.Bar.choices превратил бы int в строку, а не string в int.