Django的数据库中表的多对多关系

表之间数据的一对多关系: 一篇文章可以在多个出版社出版, 一个出版社可以出版多篇文章

一: 建立一个app, 在models.py文件中, 创建相关的表


class Publication(models.Model):
    pname = models.CharField(max_length=50)
    paddress = models.CharField(max_length=100)
    
    class Meta:
        db_table = 'publication'
        

class Article(models.Model):
    
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=20)
    # 绑定多对多关系,ManyToManyField()
    publication = models.ManyToManyField(Publication)
    class Meta:
        db_table = 'article'
    

关键字: ManyToManyField


二: 在views.py文件中, 对表进行操作


from django.shortcuts import render,HttpResponse

from .models import Publication,Article
# Create your views here.


def add(request):
    
    p1 = Publication(pname='新华社',paddress='北京')
    p1.save()
    p2 = Publication(pname='人民出版社', paddress='北京')
    p2.save()
    p3 = Publication(pname='清华出版社', paddress='北京')
    p3.save()
    p4 = Publication(pname='蓝翔出版社', paddress='山东')
    p4.save()
    
    a1 = Article(title='python教程',author='张三')
    a1.save()
    a2 = Article(title='java教程',author='李四')
    a2.save()
    a3 = Article(title='php教程',author='王五')
    a3.save()
    a4 = Article(title='HTML教程',author='赵四')
    a4.save()
    a5 = Article(title='Javascript教程',author='刘能')
    a5.save()
    
    # 如果是多对多关系,一定要将两张表中的数据保存成功后,在关联中间表
    # add使用add函数,中间表中添加记录

    # 如果是多对多关系,一定要将两张表中的数据保存成功后,在关联中间表
    # add使用add函数,中间表中添加记录

    # 如果是多对多关系,一定要将两张表中的数据保存成功后,在关联中间表
    # add使用add函数,中间表中添加记录
    
    # add添加对应的出版社
    a1.publication.add(p1,p2)
    a1.publication.add(p3)
    a2.publication.add(p2,p3,p4)
    a3.publication.add(p3,p4)
    a4.publication.add(p1,p4)
    a5.publication.add(p1,p2,p3,p4)
    
    return HttpResponse('成功........')
    

def select(request):

    # 1.根据article对象,查询publication模型对象数据
    a1 = Article.objects.get(id=3)
    # 获取publication模型对象
    # 获取这篇文章对应的所有出版社
    res =  a1.publication.all()
    for r in res:
        # r就是一个出版,获取出版社出版的所有文章
        ares = r.article_set.all()
        # 循环遍历该出版社出版的每一篇文章
        for re in ares:
            print(r.pname,re.title )
            
    # 2.根据Pubilcation对象查询该出版社出版的article对象数据
    p1 = Publication.objects.get(id=3)
    res = p1.article_set.all()
    for r in res:
        # 每一个r就是一篇文章
        print(r.title,r.author)
    
    return HttpResponse('///////')


def delete(request):

    #
    a = Article.objects.get(id=4)
    res = a.publication.all()
    for r in res:
        # 解除数据之间的关联
        a.publication.remove(r)
    # 删除对应的数据
    a.delete()

    return HttpResponse('////')

猜你喜欢

转载自blog.csdn.net/qq_41664526/article/details/80159429