目录
字段类型
有限使用,尽量使用和数据库一致的数据类型
-
数字类型IntergerField
-
BooleanField:代表true和false,也就是代表1和0
-
BigIntField
-
FloatField:会遇到精度丢失问题
-
DecimalField
-
CharFeild
#在mysql中对应的事Varchar,所以必须要指定长度 name=models.CharField(max_lenght=200)
-
TextField
可以存评论和文章。但是对于这种非关系型数据要存储在非关系到非关系型数据库,比如HBase,遇到大的文本和图片,文件推荐的是存在当前的url或者URL
-
AutoField
如果没有指定主键,当前模型会自动指定一个自增的IntergerField类型作为主键
-
ImageField
-
EmailField
当前Django用来做特殊约束和校验的字段
-
UUIDField
属于自增键的替代品,用作当前数据表的主键:安全考虑,防爬虫。
-
DateField
-
DateTimeField
字段选项/约束
-
primarykey
如果在当前的模型中设置主键
id=AutoField(max_lenght=191,primarykey=True)
-
null:默认位False,如果事True则当前字段允许为null
-
blank:代表空白字符“”,默认位False,如果事True则当前字段允许为空
不允许当前有空白字符
password=models.charField(max_lenght=200,blank=False)
-
unique:默认为Flase,如果为True,重复记录会报错
-
default:默认值
-
choice
-
时间类型字段约束:
-
auto_now_add
create_time=models.DateTimeField(auto_now_add=True)
-
auto_now
create_time=models.DateTimeField(auto_now=True)
-
创建测试应用myblog
-
创建
python manage.py startapp myblog
-
应用生效--->setting目录;INSTALLED_APPS
'myblog.apps.MyblogConfig',
-
models
class Person(models.Model): name=models.CharField(max_length=64) email = models.EmailField() update_time=models.DateTimeField(auto_now=True) create_time=models.DateTimeField(auto_now_add=True) #测试null和blank—— null=models.CharField(max_length=200,null=True) blank_test=models.CharField(max_length=200, blank=True)
-
数据库迁移
python manage.py makemigration myblog python manage.py migrate
数据库生成成功
-
以下是错误的写法。避雷:姓名不能当作主键
class Person(models.Model):
name=models.CharField(max_length=64,primary_key=True)
email = models.EmailField()
update_time=models.DateTimeField(auto_now=True)
create_time=models.DateTimeField(auto_now_add=True)
null=models.CharField(max_length=200,null=True)
blank_test=models.CharField(max_length=200, blank=True)
对于这上边的的错误,我们对于初学者老说又怎么样进行查找呢?
-
调试:逐层分析,定位打点,自我救赎
修改manage.py,进行debug测试
print(sys.argv) excute_form_command_line(sys.argv)
修改migrations
执行python manage.py migrate 命令其实是顺序执行未同步的migrations
**我们在如何二次提交又修改的表?直接执行会出现以下情况**
选1---->再回车
重新对model进行编排:删除migrations,再数据库中删除对应的同步记录,再把建的那一张表删除。
对model层进行的每一步编排都再数据库里的表中可见