CharField不保存

时间:2018-08-18 17:52:54

标签: django django-models django-model-field

我是django的新手,但是我找不到这是其他地方。我按照djangogirls教程设置了django,并创建了一个看起来像这样的模型:

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)字段都显示了默认设置,而无需我费力。此外,我似乎能够将值保存到它们,以便它们持久存在。

在外壳中四处搜寻,我得到了以下结果: screengrab from interactive shell

我在机智的尽头。我之前创建了其他简单的django项目,这应该很容易。自然,我想我犯了一个荒谬的错误……但是什么?

1 个答案:

答案 0 :(得分:2)

您应在模型中CharField之后删除逗号。对于逗号,Python将gStart属性视为元组,而不是模型字段。

gStart = models.CharField(max_length=100, default='Not set') # without ,