python-django-ORM模型
ORM模型:
Object Relational Mapping 对象关系映射
配置引擎的时候最好直接复制: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'students', 'USER':'root', 'PASSWORD':'2004', 'HOST':'129.204.3.133', 'PORT':'3306' } }
再数据库里面事先创建数据库sutdents
在 modeles.py里面建立数据库django模型
注意,其中对象名字Student结合apps名字就是创建数据库表的名oauth_student
先使用python manage.py check进行测试,看数据库配置有什么问题
在使用python manage.py makemigrations 进行模型到数据库的映射
最后使用python manage.py migrate 进行数据库的与模型的同步
结果如下;
manage.,py的参数: (base) E:\python-all\QQ>python manage.py Type 'manage.py help <subcommand>' for help on a specific subcommand. Available subcommands: [auth] changepassword createsuperuser [contenttypes] remove_stale_contenttypes [django] check compilemessages createcachetable dbshell diffsettings dumpdata flush inspectdb loaddata makemessages makemigrations migrate sendtestemail shell showmigrations sqlflush sqlmigrate sqlsequencereset squashmigrations startapp startproject test testserver [sessions] clearsessions [staticfiles] collectstatic findstatic runserver
Meta 是不能改变的
内部类
抽象类可以将我们可能用到的共同的东西协程一个类,其他需要用的就继承就可以了
代理模型就是相当于重新分配一个与五类一样的地方给扩充功能作用
from django.db import models # Create your models here. class CommonUtils(models.Model): created_at = models.DateTimeField('创建时间',auto_now_add=True) updated_at = models.DateTimeField('最后修改时间',auto_now=True) class Meta: # 抽象类不会生成mysql里面的表 abstract = True class Student(CommonUtils): """学生表""" # 自动加入id=models.AutoField 主键 name = models.CharField('姓名',max_length=64) # name = models.CharField(max_length=64, verbose_name='姓名') sex = models.CharField('性别',max_length=1,choices=( ('1','男'), ('0','女'), ),default='1') id_no = models.CharField('学号',max_length=10) age = models.PositiveIntegerField('年龄',default=0) username = models.CharField('登陆名字',max_length=64,unique=True) password = models.CharField('密码',max_length=256) #内部类 class Meta: db_table = "students" ordering = ['-updated_at'] class Course(CommonUtils): """课程""" name = models.CharField('科目',max_length=64)
ContentType是django内置的一个模型
用于建立模块和模型的连接,就是通过apps找到模型
列子:
新建一个app
用户收藏店铺的收藏表
和用户收藏的商品的收藏表
想要合并起来,就需要使用复合类型
如果进行符合关联呢:
contentType根据模块和模型来找到
结合ForeignKey进行模型的寻找
再通过GenericeForeignKey进行模型里面对象的寻找
GenericRelation 反向查看关联数
通过代码实现上面的东西:
from django.db import models # Create your models here. class WeiboUser(models.Model): """微博用户""" username = models.CharField('用户名',max_length=32) password = models.CharField('密码',max_length=256) nickname = models.CharField('昵称',max_length=32) class Meta: db_table = 'weibo_user' class Weibo(models.Model): """微博""" content = models.CharField('微博内容',max_length=500) user = models.ForeignKey(WeiboUser,verbose_name='用户名') create_at = models.DateTimeField('发布时间',auto_now_add=True) source = models.CharField('发布来源',max_length=10,null=True,blank=True) class Meta: db_table = 'weibo' class WeiboImage(models.Model): """微博图片""" weibo = models.ForeignKey(Weibo) image = models.ImageField(upload_to='weibo',verbose_name='图片') class Meta: db_table = 'weibo_images' class Commont(models.Model): """微博评论""" content = models.CharField('评论内容',max_length=250) create_at = models.DateTimeField('发布时间', auto_now_add=True) user = models.ForeignKey(WeiboUser,verbose_name='评论的用户') weibo = models.ForeignKey(Weibo,verbose_name="关联的微博") class Meta: db_table = 'weibo_commont' class Friend(models.Model): """好友关系""" user_from = models.ForeignKey(WeiboUser,verbose_name='关注人',related_name='user_to') user_to = models.ForeignKey(WeiboUser, verbose_name='被关注人',related_name='user_from') create_at = models.DateTimeField('关注时间', auto_now_add=True) class Meta: db_table = 'weibo_friends'