• 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

  • 相关阅读:
    CopyOnWriteArrayList源码阅读笔记
    ArrayList源码阅读笔记
    MySQL和Oracle的区别
    思维导图概览SpringCloud
    Java学习之Request篇
    Java学习之servlet篇
    Java学习之数据库连接池
    Java学习之注解篇
    Java爬取先知论坛文章
    Java学习之爬虫篇
  • 原文地址:https://www.cnblogs.com/flhw/p/14143974.html
Copyright © 2020-2023  润新知