我正在使用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>]>
我的问题为什么人员等级属性可以创建另一个&#39;据我所知,等级模型的最大长度为2.感谢您的解释
答案 0 :(得分:2)
这就是sqlite3的工作原理。 Id不强制执行长度限制
https://sqlite.org/faq.html#q9
SQLite不强制使用VARCHAR的长度。你可以声明一个VARCHAR(10),SQLite很乐意在那里存储一个5亿字符串。它将保持所有5亿个字符完好无损。您的内容永远不会被截断。无论N的值如何,SQLite都将“VARCHAR(N)”的列类型理解为与“TEXT”相同。
如果你想要更多功能完整的数据库使用postgres或mysql
答案 1 :(得分:-1)
废弃我以前的答案 - 根据 django model CharField: max_length does not work?
SQLite不强制执行max_length属性。
至于输入无效的选择,它可能是Django 1.10的问题(不要理解这部分)。