目录
字段类型
有限使用,尽量使用和数据库一致的数据类型
数字类型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层进行的每一步编排都再数据库里的表中可见