zoukankan      html  css  js  c++  java
  • 多对多字段四个方法

    创建表

    from django.db import models
    
    # Create your models here.
    """
    你在写orm语句的时候 跟你写sql语句一样
    不要想着一次性写完
    写一点查一点看一点
    """
    
    
    
    class Book(models.Model):
        title = models.CharField(max_length=32)
        price = models.DecimalField(max_digits=8,decimal_places=2)
        publish_date = models.DateField(auto_now_add=True)
    
        # 书籍与出版社 是一对多关系
        publish = models.ForeignKey(to='Publish')
        # 书籍与作者 是多对多
        authors = models.ManyToManyField(to='Author')
        """
        authors虚拟字段
            1.告诉orm自动帮你创建第三张关系表
            2.orm查询的时候  能够帮助你更加方便的查询
        """
    
        def __str__(self):
            return self.title
    
    
    class Publish(models.Model):
        name = models.CharField(max_length=32)
        addr = models.CharField(max_length=64)
    
        def __str__(self):
            return self.name
        """return返回的数据必须是字符串类型"""
    
    
    
    class Author(models.Model):
        name = models.CharField(max_length=32)
        age = models.IntegerField()
        # author_detail = models.ForeignKey(unique=True,to='AuthorDetail')
        author_detail = models.OneToOneField(to='AuthorDetail')
    
    
        def __str__(self):
            return self.name
    
    class AuthorDetail(models.Model):
        phone = models.BigIntegerField()
        addr = models.CharField(max_length=64)
    
        def __str__(self):
            return self.addr
    
    
    

    一对多字段增删改查

    #增
    models.Book.objects.create(title='三国演义',price=123.23,publish_id=1)
    
    publish_obj=models.Publish.objects.filter(pk=2).first()
    models.Book.objects.create(title='水浒传',price=123.23,publish=publish_obj)
    
    #查
    book_obj=models.Book.object.filter(pk=1).first()
    print(book_obj.publish)  # 获取到当前所对应的出版社对象
    print(book_obj.publish_id)  # 获取到的就是表中的实际字段
    
    #改
    models.Book.objects.filter(pk=1).update(publish_id=3)
    
    publish_obj = models.Publish.objects.filter(pk=2).first()
    models.Book.objects.filter(pk=1).update(publish=publish_obj)
    
    #删除
    models.Publish.object.filter(pk=2).delete()
     # 默认也是级联更新 级联删除
    

    多对多字段的四个方法

    #增
    # 给主键为3的书籍添加两个作者 1 2
    book_obj = models.Book.objects.filter(pk=3).first()
    #print(book_obj.authors)  # 就相当于 已经在书籍和作者的关系表了
    #book_obj.authors.add(1)
    #book_obj.authors.add(2,3)
    author_obj = models.Author.objects.filter(pk=1).first()
    author_obj1 = models.Author.objects.filter(pk=2).first()
    #book_obj.authors.add(author_obj)
    book_obj.authors.add(author_obj,author_obj1)
    
    """
    add() 括号内既可以传数字也可以传数据对象
    并且都支持传多个
    """
    
    #改
    book_obj = models.Book.objects.filter(pk=3).first()
    # book_obj.authors.set([3,])
    # book_obj.authors.set([1,3])
    author_obj = models.Author.objects.filter(pk=1).first()
    author_obj1 = models.Author.objects.filter(pk=2).first()
    book_obj.authors.set((author_obj,))
    book_obj.authors.set((author_obj,author_obj1))
    
    """
    set() 括号内 既可以传数字也传对象 
    并且也是支持传多个的
    但是需要注意 括号内必须是一个可迭代对象
    """
    
    #删
    book_obj = models.Book.objects.filter(pk=3).first()
    # book_obj.authors.remove(2)
    # book_obj.authors.remove(1,2)
    
    author_obj = models.Author.objects.filter(pk=1).first()
    author_obj1 = models.Author.objects.filter(pk=2).first()
    # book_obj.authors.remove(author_obj)
    book_obj.authors.remove(author_obj,author_obj1)
        """
        remove() 括号内 既可以传数字也传对象 
        并且也是支持传多个的
        """
    
    #清空
    book_obj = models.Book.objects.filter(pk=3).first()
    book_obj.authors.clear()
    """clear()括号内不需要传任何参数 直接清空当前书籍对象所有的记录"""
    
    
  • 相关阅读:
    jsp 特殊标签
    poj 1753 Flip Game 高斯消元 异或方程组 求最值
    zoj 3155 Street Lamp 高斯消元 异或方程组 求方案数
    poj1222 EXTENDED LIGHTS OUT 高斯消元解异或方程组 模板
    zoj 3930 Dice Notation 模拟
    zoj 3157 Weapon 线段树求逆序对数
    hdu 1242 Rescue BFS+优先队列
    hdu 3466 Proud Merchants 贪心+01背包
    zoj 3689 Digging 贪心+01背包
    hdu 2602 Bone Collector 01背包模板
  • 原文地址:https://www.cnblogs.com/aden668/p/11734390.html
Copyright © 2011-2022 走看看