CharField не экономит

Я относительный новичок в Django, но я не смог обнаружить, что это где-то еще. Я настроил django в соответствии с руководством djangogirls и создал модель, которая выглядит примерно так:

class Grimmage(models.Model):
    gStart = models.CharField(max_length=100, default='Not set'),
    gStartLat = models.FloatField(default=0.0)
    gStartLong = models.FloatField(default=0.0)
    # [...]
    gUpdateDate = models.DateField(default=timezone.now)
    gUser = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

Я сделал миграцию базы данных, и я пытаюсь создать объекты с помощью Grimmage.objects.create(gUser=request.user). (Я пробовал другие методы создания объектов с такими же результатами.)

Это то, что у меня есть в соответствующем представлении (почему я не устанавливаю значения по умолчанию снова вручную, станет ясно через мгновение):

grim = Grimmage.objects.create(gUser=user)
grim.gStart = 'Not set'
grim.gFinish = 'Not set'
grim.save()

В конечном счете, создаваемые мной представления должны проверять, были ли значения изменены с "Не задано", чтобы пройти через получение значений от пользователя. Таким образом, у объекта также есть метод с именем whatsNext(), который возвращает значение, которое необходимо заполнить следующим:

def whatsNext(self):
    ''' Returns a sting to indicate what value is needed next '''
    # Assumes the Grimmage has been checked for completeness and failed
    if self.gStart == 'Not set':
        return 'gStart'
    elif self.gFinish == 'Not set':
        return 'gFinish'
    else:
        return 'gTotalDistance'

Как ни странно, он никогда не возвращает значение "gStart", потому что оно не равно "Не установлено". Если представление выводит его строку, это то, что я получаю:

((django.db.models.fields.CharField),)

Если я снова установлю его вручную и выведу значение, оно будет работать (временно). Тем не менее, он быстро возвращается к значению...CharField.

Какое-то время я думал, что ни одно из полей не было сохранено, но все остальные (не CharField) поля отображают свои настройки по умолчанию, а я их не прикручиваю. Кроме того, мне кажется, что я могу сохранять значения, чтобы они сохранялись.

Закрутившись в оболочку, я получил такой результат: скриншот из интерактивной оболочки

Я в конце своего ума. Ранее я создавал другие простые проекты Django, и это должно было быть легко. Естественно, я предполагаю, что совершил нелепую ошибку... но что?

1 ответ

Решение

Вы должны удалить запятую после CharField в твоей модели. С запятой Python считает gStart атрибут как кортеж, а не как поле модели.

gStart = models.CharField(max_length=100, default='Not set') # without ,
Другие вопросы по тегам