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'

 

posted @ 2020-05-05 21:24  linux——quan  阅读(189)  评论(0编辑  收藏  举报