Django -- 多对多建表增删改查

ManyToManyField -- 自动创建第三张对应关系表

表结构

class Author(models.Model):
    name = models.CharField(max_length=32)
    books = models.ManyToManyField(Book)   # 描述多对多关系,不生成字段,生成关系表

 

查询

 def author_list(request):
    all_author = models.Author.objects.all()
    for author in all_author:
        print(author)  # Author object
        print(author.pk)  # 1 -- 数据对象ID
        print(author.name)  # 小白 -- 数据对象name
        print(author.books)  # app01.Book.None 关系管理对象
        print(author.books.all())  # 所关联的所有对象 QuerySet列表

 

增加

def author_add(request):
    if request.method == POST:
        name = request.POST.get(name)
        books = request.POST.getlist(books)  # getlist 获取多个元素
        author_obj = models.Author.objects.create(name=name) # 创建新作者
        author_obj.books.set(books) # 给作者和书籍绑定关系[id,id],写在author_book表中

 

删除

def author_del(request):
    pk = request.GET.get(pk)
    models.Author.objects.filter(pk=pk).delete()

 

编辑

def author_edit(request):
    pk = request.GET.get(pk)
    obj = models.Author.objects.filter(pk=pk).first()
    if request.method == POST:
        name = request.POST.get(name)
        books = request.POST.getlist(books)
?
        obj.name = name
        obj.save()
        obj.books.set(books)

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...