Django.fun

Can't save modelform with Choices Field

I've got the following model:

class Unit(models.Model):
    TYPE_CHOICES = (
        ("1", "Strecke"),
        ("2", "Zeit"),
        ("3", "anderes")
    )
    symbol = models.CharField(max_length=50)
    name = models.CharField(max_length=500)
    factor = models.FloatField()
    base_unit = models.ForeignKey("self", blank=True, null=True, on_delete=models.CASCADE)
    type = models.IntegerField(choices=TYPE_CHOICES, default=3)

Using a simple ModelForm:

class UnitForm(forms.ModelForm):
    class Meta:
        model = models.Unit
        fields = '__all__'

After running form.is_valid() I get the error: "Please choose a valid choice. 2 is not a valid choice". What am I missing here, isn't 1, 2 or 3 exactly the value I need to save the form, because those are the expected values from the type-field of the model to be saved in the database?

TYPE_CHOICES = (
        (1, "Strecke"),
        (2, "Zeit"),
        (3, "anderes")

In your template don't forget to use this format to display the value instead of the key

get_type_display

Tutorials

Константы Python: Улучшение управляемости вашего кода

Современный Python: начинаем проект с pyenv и poetry

Настройка проекта Python — виртуальные среды и управление пакетами

Использование requests в Python — тайм-ауты, повторы, хуки

Понимание декораторов в Python

ProcessPoolExecutor в Python: полное руководство

map() против submit() с ProcessPoolExecutor в Python

Понимание атрибутов, словарей и слотов в Python

Полное руководство по slice в Python

Выпуск Django 4.0

Безопасное развертывание приложения Django с помощью Gunicorn, Nginx и HTTPS

Автоматический повтор невыполненных задач Celery

Django REST Framework и Elasticsearch

Докеризация Django с помощью Postgres, Gunicorn и Nginx

Асинхронные задачи с Django и Celery

Релизы безопасности Django: 3.2.4, 3.1.12 и 2.2.24

Выпуски исправлений ошибок Django: 3.2.3, 3.1.11 и 2.2.23

Эффективное использование сериализаторов Django REST Framework

Выпуски безопасности Django: 3.2.2, 3.1.10 и 2.2.22

Выпущенные релизы безопасности Django: 3.2.1, 3.1.9 и 2.2.21

View all tutorials →