Django-Models重点知识汇总

一、表与表之间关系的处理

1、一对多的关系:

举个例子,例如出版社与书,一个出版社可以有多本书进行出版,但是书只能是一个出版社出版,这样就形成了一对多的数据关系,这个时候需要书通过外键的方式连接到出版社的表,即publisher=models.ForeignKey(to="Publisher"),在Book下的字段publisher即从Publisher表获取的一个对象

#出版社
class Publisher(models.Model):
    '''出版社数据表'''
    id=models.AutoField(primary_key=True)   #自增ID主键
    name=models.CharField(max_length=50,verbose_name='出版社名称',null=False,unique=True)
    addr=models.CharField(max_length=128,verbose_name='出版社地址',default='成都市动物园')

    def __str__(self):
        return '{},{}'.format(self.id,self.name,self.addr)

#书
class Book(models.Model):
    '''书数据表'''
    id=models.AutoField(primary_key=True)
    title=models.CharField(max_length=50,verbose_name='书名',null=False,unique=True)
    publisher=models.ForeignKey(to="Publisher")

    def __str__(self):
        return '{},{},{}'.format(self.id,self.title,self.publisher)

2、多对多的关系 :

举个例子,比如书与作者,书可以是多个作者合作写出来的,那么作者可以写很多本书,那么书和作者的关系就是多对多的关系,这个时候需要通过第三张表来体现书与作者的关系,即在作者的类中添加book=models.ManyToManyField(to='Book'),Django会自动添加第三张表来体现多对多的关系

#书
class Book(models.Model):
    '''书数据表'''
    id=models.AutoField(primary_key=True)
    title=models.CharField(max_length=50,verbose_name='书名',null=False,unique=True)
    publisher=models.ForeignKey(to="Publisher")

    def __str__(self):
        return '{},{},{}'.format(self.id,self.title,self.publisher)

#作者
class Author(models.Model):
    '''作者数据表'''
    id=models.AutoField(primary_key=True)
    name=models.CharField(max_length=50,verbose_name='作者名称',null=False,unique=True)
    book=models.ManyToManyField(to='Book')      #Django自动建立多对多关系表

二、数据库相关操作

1. 单表增删改查
                增:
                    models.Publisher.objects.create(name="沙河出版社")
                查:
                    models.Publisher.objects.get(id=1)
                    models.Publisher.objects.get(name="沙河出版社")
                删:
                    models.Publisher.objects.get(id=1).delete()
                改:
                    obj = models.Publisher.objects.get(id=1)
                    obj.name = "沙河第二出版社"
                    obj.save()

2、外键的增删改查
                增、删、查同上
                改:
                book_obj = models.Book.objects.get(id=1)
                
                book_obj.publisher 是什么?
                    和我这本书关联的出版社对象
                    book_obj.publisher.id    和我这本书关联的出版社的id值
                    book_obj.publisher.name  和我这本书关联的出版社的名称
                    
                book_obj.publisher_id 是什么?
                    和我这本书关联的出版社的id值

3.、多对多操作
                3.1、查id为1的作者都写过的书?
                    author_obj = models.Author.objects.get(id=1)
                    author_obj.books.all()     --> 和我这个作者关联的所有书对象
                3.2、想给作者绑定多本书?
                    author_obj = models.Author.objects.get(id=1)
                    author_obj.books.set([1,2,3]) --> 把id是1、2、3的书和我这个作者关联上

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值