Django 链表查询、多对多建表

背景
有两张表 1. 作者 2.书籍
关系:一个作者可以写多本书、一本书也可以多个作者

创建

思路:类似于给作者表做一个外链表 inner join

'''作者表'''
class Author(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=16,null=False,unique=True)  # 不为空, 唯一

    # 作者关联书籍表
    # 设置当前表与指定表的关联,ORM自动生成一张表对应,格式 app_当前表_关联表
    book = models.ManyToManyField(to='Book')  
    '''会生成一张app+author_book的表'''

'''
查询某个作者写了哪些书的时候
通过作者.book.all()可以展示出该作者所有的书籍【对象】!
再通过书籍对象.name  打印书籍名
'''

html

{% for bk in p.book.all %}
   {# 这里判断如果最后一本书,就不需要加分隔符#}
   {% if forloop.last %}
       {{ bk.name }}
   {% else %}
       {{ bk.name }}{% endif %}
{% endfor %}

新增\修改

新增的时候如何解决,外链的内容(新增作者,写了n本书)

html 新增一个作者,写的多本书

多选下拉框提交,选择几本书一起提交
multiple 为可以复选的下拉表
 <select multiple name="books" id="books" >
     {% for book in books %}
         <option value="{{ book.id }}">{{ book.name }}</option>
     {% endfor %}
 </select>

views中,重点

def add_author(request):
        new_name = request.POST.get('name') 
        # 获取作者多本书籍

        '''【多选框checkbox和多选的select!!!用 getlist   返回【列表】】'''
        books = request.POST.getlist('books')  

        #创建作者
        new_obj = models.Author.objects.create(name=new_name)  # 获取到对象
        # 把新作者和书籍建立关系 book 是作者对象里边的,多表连接

        '''【用set方法把多本书籍列表导入django自动完成加表工作】'''
        new_obj.book.set(books) 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django 中,使用一对多关系查询通常需要使用外键来关联两个模型。下面是一个示例模型: ```python from django.db import models class Author(models.Model): name = models.CharField(max_length=255) class Book(models.Model): title = models.CharField(max_length=255) author = models.ForeignKey('Author', on_delete=models.CASCADE) ``` 在这个模型中,`Book` 模型使用外键来关联 `Author` 模型。这表示一个作者可以有多本书,而一个书只能属于一个作者。 要查询一对多关系,您可以使用 Django 的 ORM(对象关系映射)来进行查询。例如,要查询一个作者的所有书籍,可以使用以下代码: ```python author = Author.objects.get(id=1) books = author.book_set.all() ``` 在这个例子中,我们首先使用 `get` 方法获取 ID 为 1 的作者对象。接下来,我们使用 `book_set` 属性来获取与该作者相关的所有书籍。注意,`book_set` 是由 Django 自动生成的反向关系属性,它指向 `Book` 模型,表示一个作者可以有多个关联的书籍。 如果您想要查询与一个特定书籍相关的作者,可以使用以下代码: ```python book = Book.objects.get(id=1) author = book.author ``` 在这个例子中,我们首先使用 `get` 方法获取 ID 为 1 的书籍对象。接下来,我们使用 `author` 属性来获取与该书籍相关的作者对象。注意,`author` 属性是由 Django 自动生成的外键属性,它指向 `Author` 模型,表示一本书只能属于一个关联的作者。 希望这个简单的示例能够帮助您开始使用 Django 查询一对多关系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值