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 ,