Django не может сохранить поле CharField с вариантами выбора

У меня есть это поле CharField с некоторыми вариантами выбора:

    M = 'Male'
    F = 'Female'
    O = 'Other'
    GENDER = [ 
        (M, "Male"),
        (F, "Female"),
        (O, "Other")
    ]
gender = models.CharField(max_length=10, choices=GENDER)

Когда я пытаюсь сохранить модель в базе данных, я получаю следующую ошибку:

django.db.utils.DataError: malformed array literal: ""
LINE 1: ...ddleq', 'Cani', '1971-09-01'::date, '{Male}', '', ''::varcha...
                                                             ^
DETAIL:  Array value must start with "{" or dimension information.

Значение {Male} является таким, потому что я заставил front end отправить значение таким образом, но это не так, и ошибка не имеет смысла. Пожалуйста, кто-нибудь может сказать мне, почему я получаю эту ошибку и как ее исправить?

Я использую Python 3.8. Django 4.1 PostGreSQL

Эта ошибка возникает потому, что вы пытаетесь сохранить значение поля gender в базе данных в виде строки, но поле ожидает массив значений. Чтобы исправить это, вам нужно изменить значение, которое отправляется с фронт-энда, чтобы оно было массивом, а не строкой.

Например, вместо того, чтобы отправить значение как "{Male}", вам нужно отправить его как ["Male"]. Затем вы можете использовать встроенный в Django тип поля array для правильного сохранения значения в базе данных.

Вот пример того, как можно обновить модель, чтобы использовать тип поля массив:

class MyModel(models.Model):
M = 'Male'
F = 'Female'
O = 'Other'
GENDER = [
(M, "Male"),
(F, "Female"),
(O, "Other")
]
gender = models.ArrayField(models.CharField(max_length=10), choices=GENDER)

После обновления модели вы можете сохранить массив значений для поля gender в базе данных.

Вы также можете обновить код фронт-энда, чтобы правильно форматировать значение как массив перед отправкой на сервер. Это поможет обеспечить сохранение правильных данных в базе данных и предотвратить возникновение подобных ошибок в будущем.

Вернуться на верх