Преобразование строки в целочисленное значение?

#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.