Django数据库多对多数据关系

本文主要描述Django数据中一对一的数据关系,创建app等配置不再赘述。

Django操作数据库,使用ORM

ORM:关系映射对象,把传统的SQL语句封装成了类和对象的形式,在操作表中的记录时,就像在操作类和对象一样。

使用默认数据库:sqlite

操作在models.py文件中完成。

多对多关系

举例:一个出版社发表多个文章,一篇文章也可以对多个出版社发表

ManyToManyFiled():关联两个表的函数,但是函数的设置位置,在模型中任选一个即可,不能在两个模型中都设置此函数。

class Publication(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=30, null=True)  # 出版社名称

    class Meta:
        db_table = 'Publication'

    def __unicode__(self):
        return 'Publication-Name: %s' % self.title


class Article(models.Model):
    id = models.AutoField(primary_key=True)
    headline = models.CharField(max_length=100, null=True)

    # 让文章关联出版社
    publication = models.ManyToManyField(Publication)

    class Meta:
        db_table = 'Article'

    def __unicode__(self):
        return 'Article-Name: %s' % self.headline

创建完数据库模型之后,就需要创建数据库变更文件,应用数据库变更文件创建表的操作。
创建数据库变更文件:python manage.py makemigrations
应用数据库变更文件:python manage.py migrate
可以使用SQLite可视化工具查看已经建立成功的数据库表

由于未进行其他配置,所以只能在shell环境下,对数据库进行操作。
进入shell环境的命令:python manage.py shell

注意点:

1)注意ManyToManyField()的设置位置;该实例中设置了Article模型中,在绑定两张表的时候,利用Article的对象a1进行绑定的,a1.publication.add()。但是不能使用Publication的对象p1进行绑定(p1.article.add())。

两张表之间的相互查询关系

查询a1这篇文章所属的出版社有哪些

print a1.publication.all()

查询某一出版社,所包含的所有文章有哪些

print p1.article_set.all()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值