django-mysql配置
数据库设置
DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test2',
'USER': 'root',
'PASSWORD': 'mysql',
'HOST': 'localhost',
'PORT': '3306',
}
}
常见类型
- ForeignKey
- 文本类型 TextField CharField
- 数字类型, FloatField,DecimalField,IntegerField
- Boolean类型
- 时间类型 DateTime, TimeField, DateTimeField
重写Manager类
在models中 有Manager管理类. 默认情况下 objetcs = models.Manage()
由此可以调用BookInfo.objects.all()
如果想更改名字books = models.Manager()
(这个写在BookInfo这个类中)
调用时候BookInfo.books.all()
然而这么做没有任何意义
我们可以继承这个类给这个类增加方法
class BookManager(models.Manager):
def get_queryset(self):
return super(BookManager, self).get_queryset().filter(isDelete=False)
以后再调用book查询时候就过滤了isDelete=True的数据, 做到了逻辑删除
我们还可以,增加快速创建方法。self.Model()
总是指向了调用者的类, BookInfo.objects.all()
此时, self.Model = BookInfo
自定义表名
一般表明就是 app名_类名
如果不想要这个表明, 可以在类中 写入原类的代码来修改这个表名
class BookInfo(models.Model):
字段 = 类型
class Meta():
//bookinfo 是自定义表明
db_table = 'bookinfo'
//数据id降 序 排列
ordering = ['-id']
Django-query API 访问官网
F函数可以把自己的字段提取为数值 Q可以提取单个条件 可以进行 或操作和 与操作
filter(Q()|Q())
自连接
结构很相似, 所以我们的外键可以是自己的主键。
简化了表的结构
我们的代码可以这么写,在创建models的时候
class AreaInfo(models.Model):
atitle = models.CharField(max_length=20)
//aParent_id是一个外键 是自己的主键 不能为空
aParent = models.ForeignKey('self', null=True, blank=True)
class Meta():
db_table = 'areainfo'
```