美文网首页Python - Django
Django - ORM 一对多,多对多操作

Django - ORM 一对多,多对多操作

作者: 廖马儿 | 来源:发表于2017-10-25 19:54 被阅读49次

django中的一对一,一对多,多对多

http://www.cnblogs.com/pythonxiaohu/p/5814247.html

http://luozhaoyu.iteye.com/blog/1510635

http://www.cnblogs.com/yaabb163/p/6357313.html (详细)


一对多或者多对一

这种关系可以使用外键来解决。


Django的表的多对多关系

class UserGroup(models.Model):
    name = models.CharField(max_length=32)

Class UserInfo(models.Model):
    username = model.CharField(max_length=16)
    u2g = models.ManyToManyField(UserGroup)

一对多的时候,查询一对应的多,创建等可以通过 xxx_set

models.py:

class Album(models.Model):
    artist = models.CharField(max_length=16)
    album_title = models.CharField(max_length=8)
    album_logo = models.CharField(max_length=512)

    def __str__(self):
        return self.album_title
    def __unicode__(self):
        return self.album_title

class Song(models.Model):
    album = models.ForeignKey(Album, on_delete=models.CASCADE) # 这个是级联,删除的时候有用
    name = models.CharField(max_length="16")
===== 

views.py:

# 查询

album.song_set.all()    # 查出此album的所有关联的song
<QuerySet [<Song: Song object>]>

# 创建

album.song_set.create(name="xxx")  # album这个外键可以不填写,因为是此创建的

注意:song的实例得到之后,song.album (也就是通过外键属性,得到的是一个外键Model的一个对象)

song.album
<Album: Red>

注意:也可以在template中直接使用_set,就不必在views中去查xxx_set了。

个数:
album.song_set.count() # 得到多少个


经验

1.一对多或者多对一,都是在多那里做外键:

class Book(models.Model):  
    title = models.CharField(max_length=100)  
    authors = models.ManyToManyField(Author)  
    publisher = models.ForeignKey(Publisher)  
    publication_date = models.DateField()  

一个出版社可以出多本书。在书的类中添加外键。

2.思考是否是多对多

一本书有多个作者,那么一个作者可以写多本书。

相关文章

  • Django - ORM 一对多,多对多操作

    django中的一对一,一对多,多对多 http://www.cnblogs.com/pythonxiaohu/p...

  • Django - ORM多对多

    现实生活中多对多的实例有: 这个ManyToManyField可以在两个Class的任何一个都无所谓,在数据库中生...

  • 10_ORM多表操作

    ORM多表操作 一、创建表模型 二、一对多 添加表记录: 删除表记录: 修改表记录: 三、多对多 add:可以传对...

  • django下orm学习 多对多

    前言:多对多的关系简单来说就是两张表里的数据,每一行都可以对应另外一张表里的多行数据。采用我们在一对多时使用的例子...

  • Python全栈 part02 - 006 Django(二)

    ORM 创建表(class) 单表 关联表 一对一 OneToOne 一对多 ForeignKey 多对多 ...

  • django下orm学习 一对多

    概念说明 ORM:关系对象映射的全称是 Object Relational Mapping, 简称ORM SQLA...

  • Django Model

    django的模型挺好的,不用自己写SQL。外键,多对多,一对多,多对一。 参考:Django Project

  • Django 模型间的关系

    Django模型之间的关系 Django模型的对应关系,一对一,一对多,以及多对多的关系。 一对一 OneToOn...

  • mysql ---多对多

    flask的orm框架(SQLAlchemy)-一对多查询以及多对多查询(venv) $ pip install...

  • hibernate 一对多、多对多操作

    表之间的关系 一对多一个部门有多个员工,一个员工只能属于某一个部门一个班级有多个学生,一个学生只能属于一个班级 多...

网友评论

    本文标题:Django - ORM 一对多,多对多操作

    本文链接:https://www.haomeiwen.com/subject/nheddxtx.html