zoukankan      html  css  js  c++  java
  • django一对多,多对多操作

    先在models中创建表,以及建立各表之间的关系:
    class Publisher(models.Model):
        name = models.CharField(max_length=32)
    
    class Book(models.Model):
        title = models.CharField(max_length=32)
        price = models.DecimalField(max_digits=5,decimal_places=2)    # 999.99
        publisher = models.ForeignKey('Publisher',null=True ,related_name='books', related_query_name='book',on_delete=models.CASCADE)
    
    class Author(models.Model):
        name = models.CharField(max_length=32)
        books = models.ManyToManyField('Book',related_name='authors')
    表示一对多的关系:
    # 基于对象
    # 
    # 正向查询     book ——》  publisher
    # 
    # book_obj.publisher     ——》    所关联的出版社对象
    # book_obj.publisher.name     ——》    所关联的出版社对象名称
    # book_obj.publisher.pk    ——》    所关联的出版社对象主键
    # book_obj.publisher_id     ——》    从book中直接拿到所关联对象的id
    #
    # 反向查询    publisher ——》 book
    # 
    # 不指定related_name
    # pub_obj.book_set      ——》   关系管理对象
    # pub_obj.book_set.all()      ——》 出版社出版所有的书籍对象
    
    # 指定related_name='books'
    # pub_obj.books      ——》   关系管理对象
    # pub_obj.books.all()      ——》 出版社出版所有的书籍对象
    # 
    # 基于字段查询
    # 
    # models.Book.objects.filter(publisher__name='人民出版社')
    # 
    # 不指定related_name
    # models.Publisher.objects.filter(book__name='跟金老板学开车')
    
    # 指定related_name =’books‘
    # models.Publisher.objects.filter(books__name='跟金老板学开车')
    # 指定related_query_name =’book‘
    # models.Publisher.objects.filter(book__name='跟金老板学开车')
    
    
    表示多对多的关系:
    
    
    # 基于对象的查询
    # author_obj.books      ——》   关系管理对象
    # author_obj.books.all()      ——》   关系管理对象
    # 
    # 不指定related_name 
    # book_obj.author_set      ——》   关系管理对象
    # book_obj.author_set.all()      ——》 作者写过所有的书籍对象 
    # 
    # 指定related_name='authors' 
    # book_obj.authors——》   关系管理对象
    # book_obj.authors.all()      ——》 作者写过所有的书籍对象 
    # 
    # 管理对象的方法
    #
    # all       获取所有的对象
    # set     设置关系      多对多 [ id,id  ]   [对象,对象]      一对多     [对象] 
    # add     添加关系     多对多 id,id     对象,对象     一对多     对象 
    # remove   删除关系        一对多:必须设置外键可为空,才有remove  clear方法
    # clear       清空所有的关系
    # create     创建一个对象并且添加关系
    
    
    
     
  • 相关阅读:
    linux下挂载硬盘出错的解决方法
    linux下解压缩文件中文乱码问题的解决
    VLC播放器的快捷键(shutcut)
    PGSQL 日期时间的比较
    PGSQL 字符串作为查询参数的处理
    pqsql 防注入
    js字符数组转化为数字数组
    js去除字符串的前后空白
    使用gravatar生成头像
    js删除数组的某个元素
  • 原文地址:https://www.cnblogs.com/NoteBook3013/p/10684853.html
Copyright © 2011-2022 走看看