zoukankan      html  css  js  c++  java
  • django的orm操作的补充

    ---恢复内容开始---

    你在建立一个登陆的时候需要用到auth这个用户登陆模块 这个时候就需要用到user表中的信息你就可以继承 这个时候我们的用户表中继承我们user继承的表 ABstractUser表  然后再在settings内设置信息告诉django

    AUTH_USER_MODEL="once.UserInfo"
    
    
    AUTH_USER_MODEL = '你的app.UserInfo'

    就是告诉你的django你的models内继承了这个类

    然后导入这个类

    from  django.contrib.auth.models import AbstractUser
    from  django.contrib.auth.models import AbstractUser   # 导入一个你的auth组件需要用到的user的继承的类 这样我们就可以让我们新建立的用户表也可以用到了我们auth的内容

    我们后面会用到django提供的web版本的数据库操作方便添加信息  这个时候就需要你的创建数据库的时候给你的字段赋值 让你的 django的可以方便识别

    verbose_name   这个是给你的字段加上一个web数据库可以识别的信息

    models:

    from django.db import models
    
    # Create your models here.
    
    
    from  django.contrib.auth.models import AbstractUser   # 导入一个你的auth组件需要用到的user的继承的类 这样我们就可以让我们新建立的用户表也可以用到了我们auth的内容
    
    
    class UserInfo(AbstractUser):
    
        '''
        用户信息表
        '''
        nid = models.AutoField(primary_key = True)  #设置一个id主键
    
        telephone = models.CharField(max_length = 11,null= True, unique = True )  #设置手机号 可以为空  然后不可以相同
        avatar  = models.FileField(upload_to = 'avatars/', default = 'avatars/default.png')  # 这个是设置一个存放关于 user的用户的图片的信息都放在这个所建立的文件夹内
        create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add = True)
    
        blog = models.OneToOneField(to='Blog',to_field='nid',null= True,on_delete=models.CASCADE)
    #人和博客是一对一的  所以是一对一的建立
    #不哟个再此设置姓名密码了 因为继承的有
        def __str__(self):
            return self.username
    
    
    
    # verbose_name这个字段代表的是你的数据库在关联界面的时候进行的操作  可以显示在web关联界面的
    
    
    class Blog(models.Model):
        '''
        博客信息
        '''
    
        nid = models.AutoField(primary_key = True)
    
        title = models.CharField(verbose_name='个人博客标题',max_length= 64)
    
        size_name = models.CharField(verbose_name = '站点名称', max_length = 64)
    
        theme = models.CharField(verbose_name = '博客主题',max_length = 32)
    
        def __str__(self):
            return self.title
    
    
    
    
    class Category(models.Model):
    
    
        '''
        博主的个人文章分类表
        '''
    
        nid = models.AutoField(primary_key = True)
    
        title = models.ForeignKey(to='Blog',verbose_name = '所属博客', to_field='nid', on_delete=models.CASCADE)
    
        def __str__(self):
            return self.title
    
    
    
    class Tag(models.Model):
        '''标签'''
    
        nid = models.AutoField(primary_key = True)
    
        title = models.CharField(verbose_name = '标签名称',max_length = 32)
        blog = models.ForeignKey(verbose_name = '所属博客',to = 'Blog',to_field='nid',on_delete = models.CASCADE)
    
        def __str__(self):
            return self.title
    
    
    class Article(models.Model):
        '''
        文章表
        '''
        nid = models.AutoField(primary_key = True)
        title = models.CharField(max_length = 60,verbose_name = '文章标题')
        desc = models.CharField(max_length = 300,verbose_name = '文章描述')
        create_time = models.DateTimeField(verbose_name = '创建时间',auto_now_add= True)
    
        cntent = models.TextField()  #评论内容
    
        comment_count = models.IntegerField(default = 0)  #评论数量
    
        up_count = models.IntegerField(default = 0)  # 点赞
    
        down_count = models.IntegerField(default = 0)  # 踩的数量
    
        user = models.ForeignKey(to ='Category', to_field='nid',null=True,on_delete= models.CASCADE)  # 这个是把文章和分类建立起外键
    
        tags = models.ManyToManyField(
            to = 'Tag',
            through = 'Article2Tag',  #第三张表你可以自己创建也可以你选择的创建用through来创建第三张关系表
        )
    
    
    
    class Article2Tag(models.Model):
        '''
        这个是文章表和标签的关系表  多对多的表
        '''
        nid = models.AutoField(primary_key = True)
    
        article = models.ForeignKey(verbose_name = '文章',to='Article',to_field='nid',on_delete = models.CASCADE)  #这个关联的是文章的表的字段
        tag = models.ForeignKey(verbose_name = '标签',to='Tag',to_field='nid',on_delete=models.CASCADE)  #这个是关联的你的标签的字段
    
    
        class Meta:  #联合索引
            unique_together = [
                ('article','tag')
            ]
    
    
            def  __str__(self):
                v = self.article.title+'---'+self.tag.title
    
    
                return v
    
    class ArticleUpDown(models.Model):
        '''
        点赞表
        '''
    
    
    
        nid = models.AutoField(primary_key = True)
    
        user = models.ForeignKey('UserInfo',null=True,on_delete=models.CASCADE)  #和userinfo建立起外键
        article = models.ForeignKey('Article',null=True,on_delete=models.CASCADE)  #和文章表建立外键
        is_up = models.BooleanField(default=True)  #判断是否点赞
    
        class Meta:
            unique_together=[
                ('article','user')  #建立联合索引
            ]
    
    
    
    class Comment(models.Model):
        '''
        评论表
        '''
    
    
        nid = models.AutoField(primary_key = True)
    
        article = models.ForeignKey(verbose_name = '评论文章',to='Article',to_field = 'nid',on_delete=models.CASCADE)
    
        user = models.ForeignKey(verbose_name='评论者',to='UserInfo',to_field='nid',on_delete=models.CASCADE)
    
        content = models.CharField(verbose_name = '评论内容',max_length =255)
    
        create_time =models.DateTimeField(verbose_name = '创建时间',auto_now_add=True)
    
        parent_comment = models.ForeignKey('Comment',null = True,on_delete=models.CASCADE)  #自己关联自己其实就是为了你的评论的时候找到是哪个评论的  然后就根据你上一次的评论的来回复  就是你要找到你要回复的是哪一个评论
        def __str__(self):
            return self.content
    models

    ---恢复内容结束---

  • 相关阅读:
    基于 HTML5 WebGL 的 3D 仓储管理系统
    基于 HTML5 WebGL 的 3D “弹力”布局
    基于HTML5 Canvas 实现地铁站监控
    基于HTML5的WebGL经典3D虚拟机房漫游动画
    根据矩阵变化实现基于 HTML5 的 WebGL 3D 自动布局
    玩转 HTML5 下 WebGL 的 3D 模型交并补
    基于HTML5 Canvas WebGL制作分离摩托车
    基于HTML5 Canvas的3D动态Chart图表
    基于HTML5 Canvas的工控SCADA模拟飞机飞行
    [iOS]过渡动画之高级模仿 airbnb
  • 原文地址:https://www.cnblogs.com/zhaoyunlong/p/9292851.html
Copyright © 2011-2022 走看看