zoukankan      html  css  js  c++  java
  • Python之路-(Django进阶二)

     model:

      双下划线:

            # 获取个数
            #
            # models.Tb1.objects.filter(name='seven').count()
    
            # 大于,小于
            #
            # models.Tb1.objects.filter(id__gt=1)              # 获取id大于1的值
            # models.Tb1.objects.filter(id__gte=1)              # 获取id大于等于1的值
            # models.Tb1.objects.filter(id__lt=10)             # 获取id小于10的值
            # models.Tb1.objects.filter(id__lte=10)             # 获取id小于10的值
            # models.Tb1.objects.filter(id__lt=10, id__gt=1)   # 获取id大于1 且 小于10的值

      关键字:

            字段的参数:
                null               -> db是否可以为空
                default            -> 默认值
                primary_key        -> 主键
                db_column          -> 列名
                db_index           -> 索引
                unique           -> 唯一索引
                unique_for_date    -> 时间
                unique_for_month   ->月    
                unique_for_year       ->年
                auto_now           -> 创建时,自动生成时间
                auto_now_add       -> 更新时,自动更新为当前时间                
                choices           -> django admin中显示下拉框,避免连表查询
                blank             -> django admin是否可以为空
                verbose_name      -> django admin显示字段中文
                editable          -> django admin是否可以被编辑
                error_messages    -> 错误信息欠
                help_text         -> django admin提示
                validators      -> django form ,自定义错误信息(欠)

      外键操作:

        说到外键,我们并不陌生,之前我们学过sqlalchemy,为了减少输入的重复性,下面我们来看看django的外键操作:

        首先,我们要更新我们的数据库,因为是外键所以必须是多个表之间的关系。

        

    from django.db import models
    
    # Create your models here.
    #外键,用户组织架构信息
    class user_group(models.Model):
        #主键
        uid = models.AutoField(primary_key=True)
        caption = models.CharField(max_length=128,db_index=True)
    
    
    
    #用户名基本信息
    class UserInfo(models.Model):
        username = models.CharField(max_length=32,db_index=True)
        password = models.CharField(max_length=64,db_index=True)
        email = models.EmailField()
        tel = models.IntegerField()
        u_group = models.ForeignKey(to='user_group',to_field='uid')

      

      外键的查询

    #如上表的示例:
        user_list = models.UserInfo.objects.all()
        for row in user_list:
            print(row.username,row.password,row.email,row.tel,row.u_group.caption,row.u_group.uid)

      多对多:

        创建方式一(自定义关系表):  

                class Host(models.Model):
                    nid = models.AutoField(primary_key=True)
                    hostname = models.CharField(max_length=32,db_index=True)
                    ip = models.GenericIPAddressField(protocol="ipv4",db_index=True)
                    port = models.IntegerField()
                    b = models.ForeignKey(to="Business", to_field='id')
                # 10
                class Application(models.Model):
                    name = models.CharField(max_length=32)
                # 2
                
                class HostToApp(models.Model):
                    hobj = models.ForeignKey(to='Host',to_field='nid')
                    aobj = models.ForeignKey(to='Application',to_field='id')
                    
                # HostToApp.objects.create(hobj_id=1,aobj_id=2)

        创建方式二(自动创建关系表):

                class Host(models.Model):
                    nid = models.AutoField(primary_key=True)
                    hostname = models.CharField(max_length=32,db_index=True)
                    ip = models.GenericIPAddressField(protocol="ipv4",db_index=True)
                    port = models.IntegerField()
                    b = models.ForeignKey(to="Business", to_field='id')
                # 10
                class Application(models.Model):
                    name = models.CharField(max_length=32)
                    r = models.ManyToManyField("Host")
                    
                无法直接对第三张表进行操作
                
                obj = Application.objects.get(id=1)
                obj.name
                
                # 第三张表操作
                obj.r.add(1)
                obj.r.add(2)
                obj.r.add(2,3,4)
                obj.r.add(*[1,2,3,4])
                
                obj.r.remove(1)
                obj.r.remove(2,4)
                obj.r.remove(*[1,2,3])
                
                obj.r.clear()
                
                obj.r.set([3,5,7])

          

      

  • 相关阅读:
    多线程系列教材 (四)- 常见的线程安全相关的面试题
    多线程系列教材 (三)- Java 多线程同步 synchronized 详解
    多线程系列教材 (二)- Java 常见的线程方法
    UPC-最优分解问题(贪心)
    【数论】【模板】
    UPC-人品指数(模拟)
    UPC-趾压板矩阵(强行找规律)
    UPC-排队出发+AcWing-耍杂技的牛(推公式的贪心)
    UPC-购买巧克力(贪心)
    前端——多行三列模式页面布局
  • 原文地址:https://www.cnblogs.com/lei0213/p/6206336.html
Copyright © 2011-2022 走看看