【发布时间】:2017-03-14 06:10:53
【问题描述】:
我正在使用 django 1.10 并尝试制作一些模型,其中包括一些简单的选择,这是我的 models.py
@python_2_unicode_compatible
class Person(models.Model):
Senior='A'
Middle='B'
Junior='C'
class_person=[(Senior,'Senior'),(Middle,'Middle'),\
(Junior,'Junior')]
name=models.CharField(max_length=100)
grade=models.CharField(max_length=2,choices=class_person,default=Junior)
def __str__(self):
return '%s in %s' % (self.name,self.grade)
def is_senior(self):
return self.grade in (self.Senior,self.Middle)
现在我尝试通过 shell 创建一些 Person 对象实例,例如
Person.objects.create(name='John',grade='Another')
现在我打电话
Person.objects.all()
然后它返回
<QuerySet [<Person: John in Another>]>
我的问题是为什么 Person 等级属性可以创建“另一个”,因为我知道等级模型的最大长度为 2。谢谢您的解释
【问题讨论】:
-
您确定在数据库中,表的列定义与您的模型是最新的吗?如果您在创建表格后使用 max_length 的值(或添加它),我想您可能会看到这样的行为。
-
@mimo 是否说您确定您已应用所有必需的迁移?还有你用的是什么类型的数据库?
-
@mimo 是的,我确定在创建人员对象实例之前我已经应用了所有迁移,并且在通过创建另一个模型回答您的问题之前检查了两次
-
@SardorbekImomaliev 我正在使用默认数据库 sqlite3
-
这应该是不可能的,因为它在数据库级别上应用了约束github.com/django/django/blob/…
标签: python django sqlite django-models