• python 外键用法 多对多关系 ORM操作 模板相关


    一.app/models中写类(设计表结构)

    1.普通类

    class  A(models.Model):

      id=modles.AutoField(primary_key=True)

      name=models.CharField(max_length=32,unique=True)

    2.设置外键

    class B(models.Model): 

      id = models.AutoField(primary_key=True)
      title = models.CharField(max_length=32, unique=True)

      a=models.ForeignKey(to=A,on_delete=models.CASCADE)    B必须写在A后面

      a=models.ForeignKey(to='A',on_delete=models.CASCADE)    加引号可以不按顺序写

      def __repr__(self):

          return "<B object: {}>".format(self.name)

    3.设计多对多关系表

    class C(models.Model):

      name=models.CharField(max_length=32,unique=True)

      bs=models.ManyToManyField('B')

      def __repr__(self)

        return "<C object:  {}>".format(self.name)

      __str__=__repr__

    二.ORM操作

    1.查

      models.A.objects.get(id=1,name='xx')   # 获取一个对象   —— 》一个对象  没有或多个会报错

      models.A.objects.all()      #获取所有对象  —— 》queryset 对象列表

      models.A.objects.all().order_by('-id')      #获取所有对象  —— 》queryset 对象列表  并排序

      models.A.object.filter(id=1,name='xx') 获取满足条件的所有对象  —— 》queryset 对

      相关属性

        普通类:对象.id

            对象.name

        外键:

          对象.id

          对象.name

          对象.a----->相关联的a对象

          对象.a_id  --->相关联的a对象的id

        多对多:

          对象.id

          对象.name

          对象.bs   ------>获得管理对象

          对象.bs.all---->  获取全部内容

        

    2.增

      普通:

         new-obj=models.A.objects.create(name='新的出版社名字')

      外键:  

        b_obj=models.B.objects.create(title='新的书名',a=a_obj)
        b_obj=models.B.objects.create(title='新的书名',a_id=a_obj.id)

      多对多: 

        c_obj = models.C.objects.create(name='作者名字')
        c_obj.bs.set([1,3,5])

    3.删

      删除一条

      models.A.objects.get(id=1,name='xx').delete()

      删除全部

      models.A.objects.all().delete()

    4.改

      普通:

      a_obj.name="新名字"

      a_obj.save()

      外键;

      b_obj.name="新名字"

      b_obj.a=a_obj

      b_obj.a_id=a_obj.id

      b_obj.save()

      多对多

      c_obj.name='新名字'

      c_obj.save()

      c_obj.bs.set([1,2,3])

    三.模板相关

    render(request,'模板名字',{'new_name':'新华出版社','err_meg':'出版社已存在'})

    {{ 变量名 }} {{ new_name}} 新华出版社

    标签(与逻辑相关)
    {% for a in a_list %}
      {{ forloop.counter }}
      {{ a.id }}
      {{a.name }}
    {% endfor%}

  • 相关阅读:
    String数组转换成Integer数组
    码云远程仓库用户名和密码修改了,本地如何删除修改?
    Git操作过程(码云)
    SpringCloud应用之配置中心Nacos
    SpringCloud应用之网关GateWay
    SpringCloud应用之熔断器Hystrix
    SpringCloud应用之服务调用Feign
    装饰者设计模式
    Spring 自动装配及其注解
    Spring Bean自动装配有哪些方式?
  • 原文地址:https://www.cnblogs.com/J-7-H-2-F-7/p/9621586.html
Copyright © 2020-2023  润新知