zoukankan      html  css  js  c++  java
  • orm关系

    多对多

    models

    # 出版社表
    class Publisher(models.Model):
        pid = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32, unique=True)
        addr = models.CharField(max_length=32)
    
        def __str__(self):
            return self.name
    
    #书籍表
    class Book(models.Model):
        title = models.CharField(max_length=32, unique=True)
        pub = models.ForeignKey('Publisher', on_delete=models.CASCADE) # 多对一指的是,多个书籍可以对应一个出版社
    
    #作者表
    class Author(models.Model):
        name = models.CharField(max_length=32)
        books = models.ManyToManyField('Book')  # 多对多的是,多个作者对应多个书籍
    

    views

    多对多
    查:
    all_authors = models.Author.objects.all()
    for i in all_authors:
        print(i,type(i))
        print(i.pk,type(i.pk))
        print(i.name,type(i.name))
        print(i.books,type(i.books)) #多对多的关系管理对象
        print(i.books.all(),type(i.books.all()))  #这里的books就是所谓的关系管理对象可以使用all(),filter()等orm语法进去取值
    
    对于返回值:
    Author object <class 'app01.models.Author'>
    1 <class 'int'>
    金庸 <class 'str'>
    app01.Book.None <class 'django.db.models.fields.related_descriptors.create_forward_many_to_many_manager.<locals>.ManyRelatedManager'>
    <QuerySet [<Book: Book object>]> <class 'django.db.models.query.QuerySet'>
    
    增:
     if request.method == 'POST':
            author_name = request.POST.get('author_name')
            books = request.POST.getlist('books') #获取多个书籍多个数据
            # 存入数据
            author_obj = models.Author.objects.create(name=author_name) 先存作者名字
            author_obj.books.set(books) #用返回值存多个书籍
    

    templates

    {% for author in all_authors %}
    <tr>
        <td>{{ author.pk }}</td> # 在Author表里直接取pk,name,但是books只是关系管理对象所以需要做循环以及进一步处理,
        <td>{{ author.name }}</td>
        <td>
            {% for book in author.books.all %}
                    《{{ book.title }}》  # 在这里做循环后取书籍表的名字,在模板里.all不用加()
            {% endfor %}
        </td>
    </tr>
    {% endfor %}
    

    参考这篇文章
    https://www.cnblogs.com/flhw/p/14149411.html

  • 相关阅读:
    python-13-集合增删查
    python-14-文件操作
    python接口自动化6-参数化关联
    python接口自动化5-session关联
    python-12-字典的嵌套与int快速排序
    python-11-字典的增删改查
    python-10-列表、元组嵌套
    python-9-列表的增删改查
    python-8-字符串索引与切片
    idea设置主题颜色
  • 原文地址:https://www.cnblogs.com/flhw/p/14143974.html
Copyright © 2011-2022 走看看